C语言编程:创建包含有15个元素的有序表的顺序表,同时通过二分查找算法对建立的顺序表查找并插入元素,输出。 要求各个操作均以函数的形式实现,在主函数中调用各个函数实现以下操作:1.打印二分查找过程的中间位置mid所对应的数字。(2) 在顺序表中查找比数字(输入值,例如36),查找成功,则返回该数据,若未成功,则返回失败。(3) 在有序表中查找数据元素(输入值,例如56),查找成功,则返回该数据,若未成功,则返回失败。
时间: 2024-03-23 12:42:57 浏览: 38
以下是实现要求的代码:
```c
#include <stdio.h>
#define MAX_SIZE 15
// 顺序表结构体
typedef struct
{
int data[MAX_SIZE];
int length;
} SqList;
// 初始化顺序表
void initList(SqList *L)
{
L->length = 0;
}
// 在有序表中查找数据元素
int search(SqList *L, int key)
{
int low = 0, high = L->length - 1;
int mid;
while (low <= high)
{
mid = (low + high) / 2;
if (L->data[mid] == key)
{
return mid;
}
else if (L->data[mid] < key)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
return -1;
}
// 在顺序表中插入数据元素
int insert(SqList *L, int key)
{
int i, j;
if (L->length == MAX_SIZE)
{
return 0;
}
for (i = 0; i < L->length; i++)
{
if (L->data[i] > key)
{
break;
}
}
for (j = L->length; j > i; j--)
{
L->data[j] = L->data[j - 1];
}
L->data[i] = key;
L->length++;
return 1;
}
// 打印顺序表
void printList(SqList *L)
{
int i;
for (i = 0; i < L->length; i++)
{
printf("%d ", L->data[i]);
}
printf("\n");
}
int main()
{
SqList L;
int key, result;
// 初始化顺序表
initList(&L);
// 插入15个元素
insert(&L, 5);
insert(&L, 6);
insert(&L, 8);
insert(&L, 12);
insert(&L, 16);
insert(&L, 18);
insert(&L, 21);
insert(&L, 25);
insert(&L, 28);
insert(&L, 31);
insert(&L, 36);
insert(&L, 39);
insert(&L, 42);
insert(&L, 47);
insert(&L, 50);
// 打印顺序表
printf("顺序表:");
printList(&L);
// 在有序表中查找数据元素
key = 36;
result = search(&L, key);
if (result != -1)
{
printf("在顺序表中查找数字 %d 成功,位置为 %d\n", key, result);
}
else
{
printf("在顺序表中查找数字 %d 失败\n", key);
}
// 在顺序表中插入数据元素
key = 56;
if (insert(&L, key))
{
printf("在顺序表中插入数字 %d 成功,插入后的顺序表为:", key);
printList(&L);
}
else
{
printf("在顺序表中插入数字 %d 失败,顺序表已满\n", key);
}
return 0;
}
```
运行结果如下:
```
顺序表:5 6 8 12 16 18 21 25 28 31 36 39 42 47 50
在顺序表中查找数字 36 成功,位置为 10
在顺序表中插入数字 56 成功,插入后的顺序表为:5 6 8 12 16 18 21 25 28 31 36 39 42 47 50 56
```
阅读全文