队列的相关操作

来源:互联网 发布:centos开机启动 编辑:程序博客网 时间:2024/05/18 00:57
#include <iostream>#include<stack>using namespace std;#define MAXSIZE 100/*用顺序结构实现的队列其中front指向头结点rear指向尾元素下一个结点 */typedef struct {char *array;int front;int rear;}Squeue;int DeQueue(Squeue &Q,char *result)//从队列中删除一个元素 ,结果存在result中 {if(Q.rear==Q.front)//队列空则返回 {return -1;}*result=Q.array[Q.front];Q.front=(Q.front+1)%MAXSIZE;return 0;}int EnQueue(Squeue &Q,const char elem)//从队列中插入一个元素 {if((Q.rear+1)%MAXSIZE==Q.front)//队列满则返回 {return -1;}Q.array[Q.rear]=elem;Q.rear=(Q.rear+1)%MAXSIZE;return 0;}bool isEmpty(const Squeue &Q)//判断队列是否为空 {return Q.front==Q.rear;}bool isFull(const Squeue &Q)//判断队列是否为满 {return (Q.rear+1)%MAXSIZE==Q.front;}int getLength(const Squeue &Q)//获取队列中元素个数 {return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;}void initSqueue(Squeue &Q)//队列的初始化 {Q.front=0;Q.rear=0;Q.array=new char[MAXSIZE];memset(Q.array,0,MAXSIZE);}void show(const Squeue Q)//不删除元素遍历队列 ,当然这不符合队列这种数据结构的思想,仅是测试用 {cout<<"队列中的元素:"<<endl;for(int i=Q.front;i!=Q.rear;i=(i+1)%MAXSIZE){cout<<Q.array[i]<<" ";}cout<<endl;}void reserve(Squeue &Q) //倒置队列 {stack<char>mystack;while(!isEmpty(Q)){char temp;DeQueue(Q,&temp);mystack.push(temp);}while(!mystack.empty()){char temp=mystack.top();mystack.pop();EnQueue(Q,temp);}}int main(int argc, char *argv[]){Squeue myqueue;initSqueue(myqueue);for(char i='a';i<='z';i++){EnQueue(myqueue,i);}show(myqueue);cout<<"队列中元素个数:"<<getLength(myqueue)<<endl;char tempData;DeQueue(myqueue,&tempData);cout<<"删除的数据为:"<<tempData<<endl;show(myqueue);reserve(myqueue);show(myqueue);delete[] myqueue.array;return 0;}



原创粉丝点击