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、取队头操作及结束程序运行操作
在这里插入图片描述

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

猜你喜欢

转载自blog.csdn.net/MZYYZT/article/details/123172810
今日推荐