队列的顺序存储结构

队列的顺序存储结构的实现

1)编写完成下列功能的函数:(1)初始化一个空队列;(2)创建一个包含 5 个不大于100 的正整数值的队列(5 个值由计算机随机产生);(3)将一个数 x 插到队尾(x 在程序运行时输入);(4)删除队头元素,并在删除结束后输出删除元素的值;( 5)输出队列中所有元素;(6)求队列中元素的个数。

顺序存储结构的循环队列定义

#define MAXSIZE 100 //最大长度
Typedef struct {
QElemType *base; //初始化的动态分配存储空间
int front; //头指针
int rear; //尾指针
}SqQueue;

顺序队列的插入和删除时,要判断队列空和队列满。

栈空:Q.front = Q.rear;
栈满:(Q.rear+1) % MAXSIZE = Q.front
栈长:(Q.rear - Q.front + MAXSIZE)%MAXSIZE

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#define MAXSIZE 100
#define ERROR 0
#define OK 1
typedef struct{
	int *base;
	int front;
	int rear;
}SqQueue;

int InitQueue(SqQueue &Q);
void CreateQueue(SqQueue &Q);
int EnQueue(SqQueue &Q,int x);
int DeQueue(SqQueue &Q,int &e);
int QueueLength(SqQueue Q);
int PrintQueue(SqQueue Q);

int InitQueue(SqQueue &Q)
{//初始化
	Q.base = (int*)malloc(MAXSIZE *sizeof(int));
	if (!Q.base)  
		return ERROR;   
	Q.front = Q.rear = 0;//头指针和尾指针都指向队头
	return OK;
}
void CreateQueue(SqQueue &Q)
{//创建
	int i,a;
	//S.base= (int*)malloc(MAXSIZE *sizeof(int));
	//S.top = S.base;
	printf("循环队列的长度为:");
	scanf("%d",&a);
	srand((unsigned)time(NULL));
	for(i = 0;i < a;i++ )
	{
		Q.base[Q.rear] = rand() % 100 +1;
		Q.rear = (Q.rear+1) % MAXSIZE;//尾指针循环+1
	}
}
int EnQueue(SqQueue &Q,int x)
{//插入
	if ((Q.rear+1) % MAXSIZE == Q.front) //插入先判断队列满
		return ERROR; 
	Q.base[Q.rear] = x;
	Q.rear = (Q.rear+1) % MAXSIZE;//尾指针循环+1
	return OK;
}
int DeQueue (SqQueue &Q,int &e)
{//删除
	if (Q.front == Q.rear)//删除先判断队列空  
		return ERROR;
	e = Q.base[Q.front];
	//printf("删除元素为%d\n",e);
    Q.front = (Q.front+1) % MAXSIZE;//头指针循环+1 
	return OK;
}
int QueueLength(SqQueue Q)
{//队列长度
	if(Q.front==Q.rear) 
		return ERROR;
	return (Q.rear - Q.front + MAXSIZE)%MAXSIZE;
}
int PrintQueue(SqQueue Q)
{//遍历
	 for(int p = Q.front;Q.front!=Q.rear;p++)
	{
		printf("%d ",Q.base[Q.front]);
		Q.front = (Q.front+1) % MAXSIZE;
	}
	return OK;

}

int main()
{
	int a,k,f,x,i,c,e;
	SqQueue Q;
	for(k = 0;;k++)
	{
        printf("\n1.初始化一个顺序队列\n");
		printf("2.创建一个正整数的顺序队列\n");
		printf("3.插入某个元素到队尾\n");
		printf("4.删除某个队头元素\n");
		printf("5.队列长\n");
		printf("6.遍历元素\n");
		printf("7.退出程序\n");
		printf("输入你的选择:\n");
		scanf("%d",&a);
		switch (a)
		{
		    case 1:
				f = InitQueue(Q);
				if(f == 1)
					printf("创建队列成功!\n");
				break;
			case 2:
				CreateQueue(Q);
				PrintQueue(Q);
				break;
			case 3:
				printf("你想插入的数为:");
				scanf("%d",&x);
				EnQueue(Q,x);
				PrintQueue(Q);break;
			case 4:
				c = DeQueue(Q,e);
				printf("删除元素为%d\n",c);
				PrintQueue(Q);break;
			case 5:
				 i = QueueLength(Q);
				 printf("队列长为:%d",i);break;
			case 6:PrintQueue(Q);break;
			case 7:exit(0);
		}
	}
	return OK;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值