回 帖 发 新 帖 刷新版面

主题:个人写的顺序表的基本题

#include<stdio.h>
#define MAX 100
typedef int KeyType;
typedef char InfoType[10];
typedef struct {
    KeyType key;
    InfoType info;
}NodeType;
typedef NodeType SeqList[MAX];
int SeqSearch(SeqList R,int n,KeyType k){
    int i=0;
    for(i=0;i<n;i++){
        if(R[i].key==k) break;
        printf("%d ",R[i].key);
    }
    if(i==n) return -1;
    else {
        printf("%d",R[i].key);
        return i;
    }
}
int main(){
    int    i,k,pos, n=10,a[10];
    SeqList R;
    for(i=0;i<n;i++){
        a[i]=i;
        R[i].key=i;
    }
    k=3;
    if((pos=SeqSearch(R,n,k))==-1)
        printf("\n%d Not Find\n",k);
    else printf("\n%d is find at pos %d\n",k,pos+1);

}

回复列表 (共4个回复)

沙发

半序查找
#include<stdio.h>
#define MAX 100
typedef int KeyType;
typedef char InfoType[10];
typedef struct {
    KeyType key;
    InfoType info;
}NodeType;
typedef NodeType SeqList[MAX];
int BinSear(SeqList R,int low,int high,KeyType k){
    int mid,i;
    i=1;
    while(low<=high){
        mid=(low+high)/2;
        if(R[mid].key==k) {
            printf("第%d次查找到 %d的位置是 %d\n",i,k,mid);
            return 1;
        }
        else if(k>R[mid].key) {
            printf("第%d次查找区间[%d]-[%d]\n",i,R[low].key,R[high].key);
            low=mid+1;
            mid=(high+low)/2;
            i++;
        }
        else{
            printf("第%d次查找区间[%d]-[%d]\n",i,R[low].key,R[high].key);
            high=mid-1;
            mid=(high+low)/2;
            i++;
    }
    }
        return -1;
}
int main(){
    int    i,k,pos, n=100,a[100];
    SeqList R;
    for(i=0;i<n;i++){
        a[i]=i;
        R[i].key=i;
    }
    k=38;
    BinSear(R,0,n-1,k);

}

板凳

第1次查找区间[0]-[99]
第2次查找区间[0]-[48]
第3次查找区间[25]-[48]
第4次查找区间[37]-[48]
第5次查找区间[37]-[41]
第6次查找区间[37]-[38]
第7次查找到 38的位置是 38
Press any key to continue

3 楼

不错,不过没有返回值
请在main函数最后加上return 语句

4 楼

楼上正解
如果int main()
那么最后一定要return(0);

我来回复

您尚未登录,请登录后再回复。点此登录或注册