#include <stdio.h> #define MAXSIZE 100 typedef struct { int key; char data; } Element; typedef struct { Element elem[MAXSIZE]; int length; } SeqList; int SeqSearch(SeqList *L,int key) { int i; for(i=0;i<L->length;i++) { if(L->elem[i].key==key) { return i; } } return -1; } int main() { SeqList L= { {{1,'a'},{3,'b'},{5,'c'},{7,'d'},{9,'e'}}, 5 }; int i, key, pos; printf("请输入查找的关键字:"); scanf("%d",&key); pos = SeqSearch(&L,key); if (pos == -1) { printf("未找到关键字为%d的数据\n", key); } else { printf("关键字%d在顺序表中的位置为:%d\n",key,pos); } return 0; } #include <stdio.h> #define MAXSIZE 100 typedef struct { int key; char data; } Element; typedef struct { Element elem[MAXSIZE]; int length; } SeqList; int Search(SeqList *L, int key) { int low=0,high=L->length-1,mid; while(low<=high) { mid=(low+high)/2; if(L->elem[mid].key==key) { return mid; } else if(L->elem[mid].key>key) { high=mid-1; } else { low=mid+1; } } return -1; } int main() { SeqListL= { {{1,'a'},{3,'b'},{5,'c'},{7,'d'},{9,'e'}}, 5 }; int i, key, pos; printf("请输入查找的关键字:"); scanf("%d",&key); pos=Search(&L,key); if (pos==-1) { printf("未找到关键字为%d的数据\n",key); } else { printf("关键字为%d的数据在顺序表中的位置为:%d\n",key,pos); } return 0; }
时间: 2024-03-25 12:42:15 浏览: 54
#include <stdio.h>
这段代码实现了顺序表和有序顺序表的顺序查找和二分查找。其中,顺序表和有序顺序表的定义和初始化如下:
```c
typedef struct {
int key;
char data;
} Element;
typedef struct {
Element elem[MAXSIZE];
int length;
} SeqList;
SeqList L = {
{{1,'a'},{3,'b'},{5,'c'},{7,'d'},{9,'e'}},
5
};
SeqList L_sorted = {
{{1,'a'},{3,'b'},{5,'c'},{7,'d'},{9,'e'}},
5
};
```
其中,`SeqList` 结构体表示顺序表,`Element` 结构体表示表中的元素,`MAXSIZE` 宏定义表示表的最大长度。在 `SeqList` 结构体中,`elem` 数组表示表中的元素,`length` 表示表的长度。
顺序查找的函数实现如下:
```c
int SeqSearch(SeqList *L, int key) {
int i;
for (i = 0; i < L->length; i++) {
if (L->elem[i].key == key) {
return i;
}
}
return -1;
}
```
其中,`L` 是指向顺序表的指针,`key` 是要查找的关键字。函数返回关键字在表中的位置,如果未查找到则返回 `-1`。
二分查找的函数实现如下:
```c
int Search(SeqList *L, int key) {
int low = 0, high = L->length - 1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (L->elem[mid].key == key) {
return mid;
} else if (L->elem[mid].key > key) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
```
其中,`L` 是指向有序顺序表的指针,`key` 是要查找的关键字。函数返回关键字在表中的位置,如果未查找到则返回 `-1`。
注意,这段代码中的二分查找只适用于有序顺序表。如果是无序顺序表,则需要先进行排序。
阅读全文