赞
踩
一、实验目的
熟悉循环队列的存储结构,并且熟悉掌握循环队列的初始化、入队、出队、获取队头元素以及获取队的长度等基本操作。
二、实验内容
实现循环队列的基本操作:
1)构造空的顺序栈(顺序循环队列)
2)将五个元素入栈(队)
3)求栈(队)长
4)实现入栈(进队)操作
5)实现出栈(出队)操作
测试数据:11 13 15 17 19
三、循环队列的存储结构
//循环队列的存储结构
#define MAXQSIZE 100
typedef struct{
int *base;
int front;
int rear;
} SqQueue;
四、初始化
//初始化
void InitQueue(SqQueue &Q){
Q.base = new int[MAXQSIZE]; //为队列分配一个最大容量为MAXSIZE的数组空间
if (!Q.base) cout<<"存储分配失败!"<<endl;
Q.front=Q.rear=0; //头指针和尾指针置为0,队列为空
}
五、入队操作
//入队
void InQueue(SqQueue &Q, int e){
if((Q.rear+1)%MAXQSIZE == Q.front) cout<<"队满!"<<endl;
Q.base[Q.rear] = e;
Q.rear = (Q.rear+1)%MAXQSIZE;
}
六、出队操作
这里的出队和栈里面的弹栈操作是一样的,是把元素一个一个的从队头删除掉,注意不要和获取队头元素的操作弄混淆。
//出队
void DeQueue(SqQueue &Q, int &e){
if(Q.front == Q.rear) cout<<"队空!"<<endl;
e=Q.base[Q.front];
Q.front=(Q.front + 1)%MAXQSIZE;
}
七、获取队头元素
//获取队头元素
void GetHead(SqQueue Q){
if (Q.front != Q.rear){
cout<<"队头元素为:"<<Q.base[Q.front]<<endl;
}
}
八、求队的长度
//求队列长度
void GetLen(SqQueue Q){
int len = (Q.rear - Q.front+MAXQSIZE)%MAXQSIZE;
cout<<"队列的长度为:"<<len<<endl;
}
九、主函数
我们写一个主函数来调用一下上面的函数来完成实验内容。
void main(){ SqQueue S; InitQueue(S); int inpute; for(int i=0; i<5; i++){ cout<<"请输入第"<<i+1<<"数据:"; cin>>inpute; InQueue(S, inpute); } GetLen(S); GetHead(S);//获取队头元素 int outpute; for(int j=0; j<5; j++){ DeQueue(S, outpute); cout<<"输出第"<<j+1<<"个元素:"<<outpute<<endl; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。