1. 程式人生 > >順序表的查詢

順序表的查詢

(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;

}