順序表的查詢
阿新 • • 發佈:2018-12-09
(1)隨機產生n個兩位整數,構造一個查詢表。
(2)輸入一個整數,利用順序查詢法在查詢表中查詢該整數是否存在。若查詢成功,返回該整數在表中的位置;查詢失敗則返回0。
(3)對查詢表按遞增順序進行排序。
(4)輸入一個整數,利用折半查詢法在有序表中查詢該整數是否存在。若查詢成功,返回該整數在表中的位置;查詢失敗則返回0。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
typedef struct table{
int *elem;
int length;
}SSTable;
void InitTable(SSTable &ST)
{
int i,j,n;
srand(time(0));
printf("請輸入隨機生成數的個數:");
scanf("%d",&n);
ST.elem=(int *)malloc(sizeof(int)*(n+1));
for(i=1;i<=n;i++)
ST.elem[i]=rand()%90+10;
ST.length=n;
}
int S_Search(SSTable ST,int key)
{
int n,i,j;
ST.elem[0]=key;
for(i=ST.length;ST.elem[i]!=key;i--);
return i;
}
void Display(SSTable ST)
{
int i;
for(i=1;i<=ST.length;i++)
printf("%d ",ST.elem[i]);
putchar('\n');
}
void Sort(SSTable ST)
{
int i,j;
int temp;
for(i=1;i<ST.length;i++)
{
for(j=i+1;j<=ST.length;j++)
{
if(ST.elem[i]>ST.elem[j])
{
temp=ST.elem[i];
ST.elem[i]=ST.elem[j];
ST.elem[j]=temp;
}
}
}
}
int Search_Bin(SSTable ST,int key)
{
int i,j;
int left=1,right=ST.length;
int mid=(left+right)/2;
while(left<=right)
{
if(ST.elem[mid]==key)
return mid;
if(ST.elem[mid]<key)
{
left=mid+1;
mid=(left+right)/2;
}
if(ST.elem[mid]>key)
{
right=mid-1;
mid=(left+right)/2;
}
}
return 0;
}
int main()
{
SSTable ST;
int i,j,n,key;
InitTable(ST);
Display(ST);
printf("順序查詢\n");
printf("請輸入要查詢的數:");
scanf("%d",&key);
j=S_Search(ST,key);
printf("該數字在表中的位置為:%d\n",j);
printf("排序\n");
Sort(ST);
Display(ST);
printf("折半查詢\n");
printf("請輸入要查詢的數:");
scanf("%d",&key);
j=Search_Bin(ST,key);
printf("該數字在表中的位置為:%d\n",j);
return 0;
}
(2)輸入一個整數,利用順序查詢法在查詢表中查詢該整數是否存在。若查詢成功,返回該整數在表中的位置;查詢失敗則返回0。
(3)對查詢表按遞增順序進行排序。
(4)輸入一個整數,利用折半查詢法在有序表中查詢該整數是否存在。若查詢成功,返回該整數在表中的位置;查詢失敗則返回0。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
typedef struct table{
int *elem;
int length;
}SSTable;
void InitTable(SSTable &ST)
{
int i,j,n;
srand(time(0));
printf("請輸入隨機生成數的個數:");
scanf("%d",&n);
ST.elem=(int *)malloc(sizeof(int)*(n+1));
for(i=1;i<=n;i++)
ST.elem[i]=rand()%90+10;
ST.length=n;
}
int S_Search(SSTable ST,int key)
{
int n,i,j;
ST.elem[0]=key;
for(i=ST.length;ST.elem[i]!=key;i--);
return i;
}
void Display(SSTable ST)
{
int i;
for(i=1;i<=ST.length;i++)
printf("%d ",ST.elem[i]);
putchar('\n');
}
void Sort(SSTable ST)
{
int i,j;
int temp;
for(i=1;i<ST.length;i++)
{
for(j=i+1;j<=ST.length;j++)
{
if(ST.elem[i]>ST.elem[j])
{
temp=ST.elem[i];
ST.elem[i]=ST.elem[j];
ST.elem[j]=temp;
}
}
}
}
int Search_Bin(SSTable ST,int key)
{
int i,j;
int left=1,right=ST.length;
int mid=(left+right)/2;
while(left<=right)
{
if(ST.elem[mid]==key)
return mid;
if(ST.elem[mid]<key)
{
left=mid+1;
mid=(left+right)/2;
}
if(ST.elem[mid]>key)
{
right=mid-1;
mid=(left+right)/2;
}
}
return 0;
}
int main()
{
SSTable ST;
int i,j,n,key;
InitTable(ST);
Display(ST);
printf("請輸入要查詢的數:");
scanf("%d",&key);
j=S_Search(ST,key);
printf("該數字在表中的位置為:%d\n",j);
printf("排序\n");
Sort(ST);
Display(ST);
printf("折半查詢\n");
printf("請輸入要查詢的數:");
scanf("%d",&key);
j=Search_Bin(ST,key);
printf("該數字在表中的位置為:%d\n",j);
}