例题一顺序实现"/>
数据结构队列例题一顺序实现
仅供个人复习使用
#include<iostream>
#define MAXSIZE 6using 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;}
更多推荐
数据结构队列例题一顺序实现
发布评论