#include<bits/stdc++.h>
using namespace std;
#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef char QElemType;
typedef int Status;
typedef struct{
QElemType *base;
int front;
int rear;
}SqQueue;
typedef struct QNode{
QElemType data;
struct QNode*next;
}QNode,*QueuePtr;
typedef struct{
QNode* front;
QNode* rear;
}LinkQueue;
Status initQueue(LinkQueue &Q){
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return OK;
}
Status enQueue(LinkQueue &Q,QElemType e){
QueuePtr p;
p=new QNode;
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
Status deQueue(LinkQueue &Q,QElemType &e){//删除队头元素,用e返回其值
QueuePtr p;
if(Q.front==Q.rear)return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p)Q.rear=Q.front;
delete p;
return OK;
}
QElemType getHead(LinkQueue Q){
if(Q.front!=Q.rear)
return Q.front->next->data;
}
bool IsEmpty(LinkQueue Q){
if(Q.front==Q.rear)
return false;
else return true;
}
Status InitQueue(SqQueue &Q){
Q.base=new QElemType[MAXSIZE];
if(!Q.base)exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
int QueueLength(SqQueue Q){
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
Status EnQueue(SqQueue &Q,QElemType e){
if((Q.rear+1)%MAXSIZE==Q.front)return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
return OK;
}
Status DeQueue(SqQueue &Q,QElemType &e){ //出队
if(Q.front==Q.rear)return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
return OK;
}
QElemType GetHead(SqQueue Q){
if(Q.front!=Q.rear)return Q.base[Q.front];
}
bool IsEmpty(SqQueue Q){
return Q.front==Q.rear;
}
int main(){
int choose,flag=0;
SqQueue Q;
QElemType e,j;
cout<<"请输入你想要1.普通还是2.链式队列:"<<endl;
int chocho;cin>>chocho;
if(chocho==1){
cout<<"你选择了普通存储"<<endl;
while(true){
cout<<"*********"<<endl;
cout<<"请输入选项"<<endl;
cout<<"1.初始化"<<endl;
cout<<"2.入队"<<endl;
cout<<"3.读队头元素"<<endl;
cout<<"4.出队"<<endl;
cout<<"0.退出"<<endl;
cout<<"队空队满的区分:"<<endl;
cout<<"front前一块不放有效数据,rear+1如果是队头,那说明队满了"<<endl;
cin>>choose;
switch(choose){
case 1:
if(InitQueue(Q)){
flag=1;
cout<<"成功初始化"<<endl;
}
else cout<<"fail to init"<<endl;
break;
case 2:
int n;
cout<<"请输入数量"<<endl;cin>>n;
for(int i=0;i<n;i++){
char m;
cout<<"请输入元素:";cin>>m;
EnQueue(Q,m);
}
break;
case 3:
if(!IsEmpty(Q)){
cout<<"队头为"<<GetHead(Q)<<endl;
}
break;
case 4:
cout<<"依次弹出队头:"<<endl;
while(DeQueue(Q,e)){
cout<<e<<"\t";
}
cout<<endl;
break;
case 0:
return 0;
break;
default:
cout<<"没有该选项!"<<endl;
break;
}
}}
else{
LinkQueue Q1;
cout<<"你选择了链式存储"<<endl;
while(true){
cout<<"*********"<<endl;
cout<<"请输入选项"<<endl;
cout<<"1.初始化"<<endl;
cout<<"2.入队"<<endl;
cout<<"3.出队"<<endl;
cout<<"4.判断队列是否为空"<<endl;
cout<<"0.退出"<<endl;
cin>>choose;
switch(choose){
case 1:
initQueue(Q1);
cout<<"初始化完成"<<endl;
break;
case 2:
cout<<"请输入需要插入多少个元素"<<endl;
int n_;cin>>n_;QElemType m_;
for(int i=0;i<n_;i++){
cin>>m_;
enQueue(Q1,m_);
}
break;
case 3:
QElemType headde;
deQueue(Q1,headde);
cout<<"删除的头是"<<headde<<endl;
break;
case 4:
cout<<"现在队头是"<<getHead(Q1)<<endl;
break;
case 0:
cout<<"感谢使用!"<<endl;
return 0;
break;
default:
cout<<"没有该选项!"<<endl;
break;
}
}
}
}
c++普通队列、链式队列、初始化、入队出队、判断队空队满
最新推荐文章于 2024-07-22 15:41:09 发布