C/C++顺序队列查询算法

大纲

  1. 创建顺序队列。
  2. 使用顺序查询和折半查询(用大小排序算法配合)进行基础查询操作。
  3. 其余随意,完工。

图片示例展示

代码纯文本示例展示

#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

顺序队列查询应用,实现与保存。

~


发布了34 篇原创文章 · 获赞 0 · 访问量 499

猜你喜欢

转载自blog.csdn.net/weixin_44228006/article/details/104095725