仅供个人复习使用文章来源地址https://www.toymoban.com/news/detail-742098.html
#include<iostream>
#define MAXSIZE 6
using namespace std;
typedef struct
{
int *base;
int front;
int rear;
}sqQueue;
void Init(sqQueue &Q) //初始化
{
Q.base = new int[MAXSIZE];
Q.front = Q.rear = 0;
}
int QueueLength(sqQueue Q)//求队列长度
{
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; //防止队头在队尾后面
}
void EnQueue(sqQueue &Q , int e)//插入数据
{
//一直插入队尾元素会造成数组逸出现象,事实上,如果队头元素有出队的话此时队列并不是满的
//这种现象为"假逸出",巧妙的方法是把队列变成一个环状的空间,队列大小为M时,有M-1个元素就认为是队满
if( (Q.rear + 1) % MAXSIZE == Q.front) // 循环意义上的队满
{
cout<<"队满"<<'\n';
return;
}
Q.base[Q.rear] = e;
Q.rear = (Q.rear + 1) % MAXSIZE;
}
void DeQueue(sqQueue &Q , int &e)//删除数据
{
if(Q.front == Q.rear)
{
cout<<"队空"<<'\n';
}
e = Q.base[Q.front];
Q.front = (Q.front + 1) % MAXSIZE;
}
int GetHead(sqQueue &Q)
{
if(Q.rear != Q.front)
{
return Q.base[Q.front];
}
}
int GetRear(sqQueue &Q)
{
if(Q.rear != Q.front)
{
return Q.base[(Q.rear - 1 + MAXSIZE) % MAXSIZE];//防止队尾指向0而数组越界
}
}
int main()
{
sqQueue Q;
Init(Q);
int e = 0;
cout<<"输入数据,输入-1时停止"<<'\n';
while(1)
{
int x;
cin>>x;
if(x == -1) break;
EnQueue(Q,x);
}
cout<<"队列长度为:";
cout<<QueueLength(Q)<<'\n';
DeQueue(Q,e);
cout<<"已删除队头数据:"<<e<<'\n';
cout<<"队头元素为:"<<GetHead(Q);
cout<<"队尾元素为:"<<GetRear(Q);
return 0;
}
文章来源:https://www.toymoban.com/news/detail-742098.html
到了这里,关于数据结构队列例题一顺序实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!