.线性表的查找 (1)输入一个整数,利用顺序查找法在查找表中查找该整数是否存在。若查找成功,返回该整数在表中的位置;查找失败则返回0。 (2)输入一个整数,利用折半查找法在有序表中查找该整数是否存在。若查找
时间: 2023-12-06 19:44:32 浏览: 31
成功,返回该整数在表中的位置;查找失败则返回0。
顺序查找法的实现:
```
int Sequential_Search(int* a, int n, int key)
{
int i;
for (i = 0; i < n; i++) {
if (a[i] == key) {
return i+1; // 返回位置
}
}
return 0; // 查找失败
}
```
折半查找法的实现:
```
int Binary_Search(int* a, int n, int key)
{
int low = 0, high = n-1, mid;
while (low <= high) {
mid = (low + high) / 2;
if (a[mid] == key) {
return mid+1; // 返回位置
} else if (a[mid] > key) {
high = mid - 1;
} else {
low = mid + 1;
}
}
return 0; // 查找失败
}
```
其中,`a` 是一个指向数组的指针,`n` 是数组中元素的数量,`key` 是要查找的整数。在查找成功时,返回该整数在表中的位置;查找失败时,返回0。
相关问题
c语言代码,先输入线性表长度n,然后输入n个整数建立整数顺序表。在顺序表上练习①按值查找;②删除元素 的操
非常感谢您的提问!以下是您需要的C语言代码:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100
typedef struct {
int data[MAXSIZE];
int length;
} SqList;
int LocateElem(SqList L, int e) {
for (int i = 0; i < L.length; i++) {
if (L.data[i] == e) {
return i;
}
}
return -1;
}
int ListDelete(SqList *L, int e) {
int i = LocateElem(*L, e);
if (i == -1) {
return 0;
}
for (; i < L->length - 1; i++) {
L->data[i] = L->data[i + 1];
}
L->length--;
return 1;
}
int main() {
SqList L;
printf("请输入线性表长度n:");
scanf("%d", &L.length);
printf("请输入%d个整数,用空格隔开:", L.length);
for (int i = 0; i < L.length; i++) {
scanf("%d", &L.data[i]);
}
int e;
printf("请输入要查找的元素:");
scanf("%d", &e);
int pos = LocateElem(L, e);
if (pos == -1) {
printf("未找到该元素!\n");
} else {
printf("该元素在第%d个位置上。\n", pos + 1);
}
printf("请输入要删除的元素:");
scanf("%d", &e);
int res = ListDelete(&L, e);
if (res == 0) {
printf("未找到该元素,删除失败!\n");
} else {
printf("删除成功!\n");
printf("删除后的线性表为:");
for (int i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
}
return 0;
}
希望这个代码能够帮助您练习按值查找和删除元素的操作。如果您有其他问题,欢迎随时提出!
以顺序存储的顺序表为查找表进行顺序查找,且用冒泡排序法对此线性表排序并打印出来完整代码
下面是一个完整的以顺序存储的顺序表为查找表进行顺序查找,并使用冒泡排序算法对此线性表进行排序并打印出来的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 100 // 定义顺序表的最大长度
typedef int ElemType; // 假设表中元素类型为整型
typedef struct {
ElemType data[MAXSIZE]; // 存储表中元素的数组
int length; // 表的当前长度
} SqList;
// 冒泡排序算法
void BubbleSort(SqList *L) {
int i, j;
for (i = 0; i < L->length - 1; i++) {
for (j = 0; j < L->length - 1 - i; j++) {
if (L->data[j] > L->data[j+1]) {
ElemType temp = L->data[j];
L->data[j] = L->data[j+1];
L->data[j+1] = temp;
}
}
}
}
// 顺序查找算法
int SeqSearch(SqList L, ElemType key) {
int i;
for (i = 0; i < L.length; i++) {
if (L.data[i] == key) {
return i;
}
}
return -1; // 查找失败
}
int main() {
SqList L;
int i, result, key;
// 初始化顺序表
L.length = 10;
for (i = 0; i < L.length; i++) {
L.data[i] = rand() % 100; // 随机生成 0~99 的整数
}
// 输出顺序表中的元素
printf("顺序表中的元素为:");
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
// 进行冒泡排序
BubbleSort(&L);
// 输出排序后的顺序表
printf("排序后的顺序表为:");
for (i = 0; i < L.length; i++) {
printf("%d ", L.data[i]);
}
printf("\n");
// 进行顺序查找
printf("请输入要查找的元素:");
scanf("%d", &key);
result = SeqSearch(L, key);
// 输出查找结果
if (result != -1) {
printf("查找成功,元素 %d 在表中的位置为 %d\n", key, result);
} else {
printf("查找失败,元素 %d 不在表中\n", key);
}
return 0;
}
```
在这个示例中,我们在原来的基础上增加了一个 `BubbleSort` 函数,用来对顺序表进行冒泡排序。在 `main` 函数中,我们先初始化了一个长度为 10 的顺序表,并输出表中的元素;然后调用 `BubbleSort` 函数对表进行排序,并输出排序后的结果;最后让用户输入要查找的关键字,调用 `SeqSearch` 函数进行查找,并输出查找结果。