大纲
- 创建顺序队列。
- 使用顺序查询和折半查询(用大小排序算法配合)进行基础查询操作。
- 其余随意,完工。
图片示例展示
代码纯文本示例展示
#include<stdio.h>
#include<stdlib.h>
#define LIST_INIT_SIZE 20 //线性表存储空间的初始分配量 int a[50];
#define LISTINCREMENT 10 //线性表存储空间的分配增量
typedef struct
{
int* elem; //存储空间基址,数组a[1,2,3,4,5,6],int* elem=&a[0]地址
int length;//当前长度
int listsize;//当前分配的存储容量,此参数设置为队列可存储的最大元素量
}SqList;
int InitList_Sq(SqList* L, int a)
{ //构造一个空的线性表L
L->elem = (int*)malloc(LIST_INIT_SIZE * sizeof(int)); //分配了20个int整型的空间
if (!L->elem) return 0;
L->length = a; //空表长度为a
L->listsize = LIST_INIT_SIZE; //初始化存储容量
return 1;
}
int Search_seq(SqList* ST, int key)//顺序查找
{
int* k = ST->elem;
int a = 0;
while (*k != key)
{
k++;
a++;
}
return a;
}
int Search_bin(SqList* ST, int key)
{
int a = ST->length;
int* b = ST->elem;
int low = 0, mid, high = a - 1; //底,中,高
while (low <= high) //循环判断
{
mid = (low + high) / 2;
if (key < b[mid])
high = mid - 1;
else if (key > b[mid])
low = mid + 1;
else if (key == b[mid])
{
printf("查找成功!ST.elem[%d]=%d\n位置是:%d", mid, key, mid);
break;
}
}
return 0;
}
void paixu(SqList* ST)
{
int a, * b;
a = ST->length;
b = ST->elem;
//从小到大排序
for (int c = 0; c < a-1; c++) //每一次循环都把队列中最小的放在最前面依次下去
{
for (int d = c+1; d < a; d++)
{
if (b[d] < b[c])
{
int temp; //用作交换
temp = b[d]; //b==a a[5]中的a
b[d] = b[c];
b[c] = temp;
}
}
}
/*
//从小到大排序
for (int c = 0; c < a; c++)
{
for (int d = 0; d < c; d++) //每次循环都进行一个以c为界限的排序,把小的放前面依次进行,2,3(包含2),4(包含3)这种比较
{
if (b[d] > b[c])
{
int temp; //用作交换
temp = b[d]; //b==a a[5]中的a
b[d] = b[c];
b[c] = temp;
}
}
}
*/
}
int main()
{
printf("请输入静态查找表的长度:\n");
int n, i;
scanf_s("%d", &n);
printf("请输入一个表格:\n");
SqList ST;
InitList_Sq(&ST, n);
int key; //要查找的数字
for (i = 0; i < n; i++)
scanf_s("%d", &ST.elem[i]);
printf("静态查找表是:\n");
for (i = 0; i < n; i++)
printf("%d%c", ST.elem[i], i == n - 1 ? '\n' : ' '); //如果i+1!=n则输出空格,否则输出换行
printf("请输入要查找的元素:\n");
scanf_s("%d", &key);
printf("首先是使用顺序查找法!\n");
printf("位置是:%d\n", Search_seq(&ST, key)); //顺序查找
printf("接下来使用折半查找法!\n");
printf("给表的各元素进行从小到大进行排序!");
paixu(&ST); //排序函数
printf("\n排序后,静态查找表为:\n");
for (i = 0; i < n; i++)
printf("%d%c", ST.elem[i], i == n - 1 ? '\n' : ' ');
printf("请输入要查找的元素:\n");
scanf_s("%d,", &key);
Search_bin(&ST, key); //折半查找
return 0;
}
运行效果展示
End
顺序队列查询应用,实现与保存。
~