#include<bits/stdc++.h>
using namespace std;
typedef struct LinkNode{
int data;
struct LinkNode *next;
}LinkNode,LinkNode1;
typedef struct{
LinkNode *front,*rear;
}LinkQueue;
void InitQueue(LinkQueue &Q){//初始化队列
Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
Q.front->next=NULL;
cout<<"初始化成功"<<endl;
}
void IsEmpty(LinkQueue Q){//判断队列是否为空
if(Q.front==Q.rear)
cout<<"队列为空"<<endl;
}
void EnQueue(LinkQueue& Q,int x){//存储队列元素
LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));
s->data=x;
cout<<"输入元素:"<<x<<endl;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
if(Q.front==Q.rear){
cout<<"有bug"<<endl;
}
}
void InsertQueue(LinkQueue& Q,int x,int e){
LinkNode* p7=Q.front->next;
LinkNode* p8=(LinkNode*)malloc(sizeof(LinkNode));
p8->data=e;
while(p7->data!=x){
p7=p7->next;
}
p8->next=p7->next;
p7->next=p8;
}
int DeleteQueue(LinkQueue&Q,int x){
if(Q.front==Q.rear){
cout<<"无法删除"<<endl;
return false;
}
LinkNode* p5=Q.front->next;
LinkNode* p6;
while(p5->data!=x){
p5=p5->next;
}
p6=p5->next;
p5->next=p6->next;
cout<<"删除x后面的第一个元素"<<p6->data<<endl;
free(p6);
}
void BianLiQueue(LinkQueue& Q){//遍历队列元素
LinkNode * p1=Q.front->next;
int i=0;
if(Q.front==Q.rear){
cout<<"队列中无元素"<<endl;
}
else{
for(p1=p1;p1!=NULL;p1=p1->next){
i++;
cout<<"遍历元素为"<<p1->data<<endl;
}
}
cout<<"队列中共有"<<i<<"个元素"<<endl;
}
int DeQueue(LinkQueue& Q){//删除队列元素
if(Q.front==Q.rear){
cout<<"无法删除"<<endl;
return false;
}
LinkNode *p=Q.front->next;
int x;
x=p->data;
cout<<"返回删除的元素为:"<<x<<endl;
Q.front->next=p->next;
if(Q.rear==p){
Q.rear=Q.front;
}
free(p);
cout<<"删除成功"<<endl;
return true;
}
int n,x;
int main(){
LinkQueue L;
InitQueue(L);
cin>>n;
for(int i=1;i<=n;i++){
cin>>x;
EnQueue(L,x);
}//添加元素x
for(int i=1;i<=n;i++){
DeQueue(L);//逐一删除元素x
}
IsEmpty(L);
EnQueue(L,100);//添加元素100
DeQueue(L);//删除元素100
IsEmpty(L);
EnQueue(L,1000);//添加元素1000
EnQueue(L,10000);//添加元素10000
EnQueue(L,100000);//添加元素100000
DeQueue(L);
DeQueue(L);
EnQueue(L,500000);
EnQueue(L,600000);
EnQueue(L,700000);
EnQueue(L,800000);
DeleteQueue(L,500000);//删除500000后的第一个元素
BianLiQueue(L);
InsertQueue(L,700000,999999);//在data值为700000的结点后存储data值为9999999的结点
BianLiQueue(L);
}
运行结果
初始化成功
1
6
输入元素:6
返回删除的元素为:6
删除成功
队列为空
输入元素:100
返回删除的元素为:100
删除成功
队列为空
输入元素:1000
输入元素:10000
输入元素:100000
返回删除的元素为:1000
删除成功
返回删除的元素为:10000
删除成功
输入元素:500000
输入元素:600000
输入元素:700000
输入元素:800000
删除x后面的第一个元素600000
遍历元素为100000
遍历元素为500000
遍历元素为700000
遍历元素为800000
队列中共有4个元素
遍历元素为100000
遍历元素为500000
遍历元素为700000
遍历元素为999999
遍历元素为800000
队列中共有5个元素