C语言--队列的基本操作

C语言–队列的基本操作

内容

创建一个顺序队列,实现数据的入队和出队运算,进而验证队列的先进先出的特性。步骤如下:

  1. 创建入队和出队函数;
  2. 在主函数中输入数据,以’\0’做结束标志,调用入队和出队函数。
  3. 以及队列的基本操作。

实验代码

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define MAX 100
typedef int QElemType;

typedef struct
{
	QElemType *base;
	int front;
	int rear;
}SqQueue;

void InitQueue(SqQueue &Q);//队列的初始化函数
void SetQueue(SqQueue &Q);//建立一个顺序队列函数
int QueueLength(SqQueue Q);//查看队列长度函数
void EnQueue(SqQueue &Q,QElemType e);//入队函数
void DeQueue(SqQueue &Q,QElemType &e);//出队函数
QElemType GetHead(SqQueue Q);//取队头元素操作函数
void OutQueue(SqQueue &Q);//遍历队列元素函数


void InitQueue(SqQueue &Q)
{
	Q.base=(QElemType*)malloc(sizeof(QElemType)*MAX);
	if(!Q.base)
		printf("存储队列失败\n");
	Q.front=Q.rear=0;
	printf("顺序队列成功初始化\n");
}
void EnQueue(SqQueue &Q,QElemType e)
{
	if(QueueLength(Q)>=MAX-1)
		printf("队列已满\n");
	Q.base[Q.rear]=e;
	Q.rear=(Q.rear+1)%MAX;
	printf(" %d ",e);
}
void SetQueue(SqQueue &Q)
{
	QElemType e;
	printf("请依次输入队列元素,并输入0作为结束标括志:");
	while(1)
	{
		scanf("%d",&e);
		if(e==0)
			break;
		EnQueue(Q,e);
	}fflush(stdin);
}
int QueueLength(SqQueue Q)
{
	return (abs(Q.rear-Q.front)+MAX)%MAX;
}
void DeQueue(SqQueue &Q,QElemType &e)
{
	if(Q.rear==Q.front)
		printf("队列为空\n");
	e=Q.base[Q.front];
	Q.front=(Q.front+1)%MAX;
}
QElemType GetHead(SqQueue Q)
{
	if(Q.rear==Q.front)
		printf("队列为空!\n");
	return Q.base[Q.front];
}
void OutQueue(SqQueue &Q)
{

	QElemType s;
	s=Q.front;
	if(Q.front==Q.rear)
		printf("队列为空\n");
	else
	{
		printf("顺序队列依次为a:");
		while(s<Q.rear)
		{
			printf(" %d ",Q.base[s]);
			s=s+1;
		}
		printf("\n");
	}
}
int main()
{
	QElemType x;
	SqQueue T;
	int k,y;
	do
	{
		printf("\n");
		printf("1、队列的初始化\n");
		printf("2、建立顺序队列\n");
		printf("3、查看队列长度操作\n");
		printf("4、入队操作\n");
		printf("5、出队操作\n");
		printf("6、取队头操作\n");
		printf("0、结束程序运行!\n");
		printf("请输入你要选择操作:0,1,2,3,4,5,6");
		printf("\n\n\n");
		printf("===========================\n");
		scanf("%d",&k);
		switch(k)
		{
		case 1:
			InitQueue(T);
			break;
		case 2:
			SetQueue(T);
			printf("\n已建立顺序队列\n");
			OutQueue(T);
			break;
		case 3:			
			printf("队列长度为:%d\n",QueueLength(T));
			OutQueue(T);
			break;
		case 4:
			printf("请输入入队的值:");
			scanf("%d",&x);
			EnQueue(T,x);
			printf("\n");
			OutQueue(T);
			break;
		case 5:
			DeQueue(T,x);
			printf("出队元素的值: %d\n",x);
			OutQueue(T);
			break;
		case 6:
			y=GetHead(T);
			printf("队头元素:%d",y);
			break;
		case 0:
			return 0;
		}
	}while(k!=0);
}

结果

1、队列的初始化
在这里插入图片描述
2、建立顺序队列
在这里插入图片描述
3、查看队列长度
在这里插入图片描述
4、入队操作
在这里插入图片描述

5、出队操作
在这里插入图片描述
6、取队头操作及结束程序运行操作
在这里插入图片描述

加油加油!!!!!!!!!!!!!!!!

  • 8
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序队列是一种线性结构,它具有先进先出的特点,也就是说,先进入队列的元素先出队列。在C语言中,我们可以使用数组来实现顺序队列。 下面是顺序队列基本操作实现: 1. 初始化队列 ```c #define MAXSIZE 100 // 定义队列最大长度 typedef struct { int data[MAXSIZE]; // 存储队列元素 int front; // 队首指针 int rear; // 队尾指针 } SqQueue; // 初始化队列 void InitQueue(SqQueue *Q) { Q->front = Q->rear = 0; } ``` 2. 判断队列是否为空 ```c // 判断队列是否为空 int IsEmpty(SqQueue Q) { if (Q.front == Q.rear) { return 1; // 队列为空 } else { return 0; // 队列不为空 } } ``` 3. 判断队列是否已满 ```c // 判断队列是否已满 int IsFull(SqQueue Q) { if ((Q.rear + 1) % MAXSIZE == Q.front) { return 1; // 队列已满 } else { return 0; // 队列未满 } } ``` 4. 入队操作 ```c // 入队操作 int EnQueue(SqQueue *Q, int x) { if (IsFull(*Q)) { return 0; // 队列已满,无法入队 } else { Q->data[Q->rear] = x; // 将元素 x 插入到队尾 Q->rear = (Q->rear + 1) % MAXSIZE; // 队尾指针后移一位 return 1; // 入队成功 } } ``` 5. 出队操作 ```c // 出队操作 int DeQueue(SqQueue *Q, int *x) { if (IsEmpty(*Q)) { return 0; // 队列为空,无法出队 } else { *x = Q->data[Q->front]; // 将队首元素赋值给 x Q->front = (Q->front + 1) % MAXSIZE; // 队首指针后移一位 return 1; // 出队成功 } } ``` 以上就是顺序队列基本操作实现,你可以根据需要进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值