队列的链式储存结构(以结构体实现)

本文展示了一段C++代码,用于创建和操作链表结构的队列。程序包括初始化队列、判断队列是否为空、入队、出队以及遍历队列等基本操作。用户可以输入数据进行入队和出队,然后查看队列当前的状态。
摘要由CSDN通过智能技术生成

先上结果:

72f18ebfb7ba46edbb72fde1a7786d71.jpg

9513a1c585bb44bf9154f41c1c78b91c.jpg 

500c115783374d8ca50c585e5f41e639.jpg 

 下面是可执行的代码

#include<bits/stdc++.h>

using namespace std;

struct Node //定义链表结点结构体 

{

 int data; //数据域 

 Node* next; //指针域 

};

struct Queue //定义队列结构体 

{

 Node* fron; //队首指针 

 Node* rear; //队尾指针 

};

void Zero(Queue& Q) //初始化 

{

 Q.fron =NULL; //将队首指针置为空

 Q.rear =NULL; //将队尾指针置为空 

}

bool Null_(Queue& Q) //判空 

{

 return (Q.fron==NULL); //如果队首指针为空,则说明队列为空

}

void Push(Queue& Q,int x) //入队 

{

 Node* p=new Node; //创建新节点 

 p->data =x; //将入队元素赋给新节点的数据域 

 p->next =NULL; //将新节点的指针域置为空

 if(Null_(Q)) //如果队列为空 

 {

  Q.fron=Q.rear=p; //将队首,队尾指针都 指向新节点 

 }

 else //队列不为空 

 {

  Q.rear->next=p; //将新节点添加到队尾 

  Q.rear =p; //相当于将新节点变为新的队尾 

 }

}

int pop(Queue& Q) //入队 

{

 if(Null_(Q)) //判空 

 {

  cout<<"队列已空"<<endl; //提示 

  return -1; 

 }

 int x=Q.fron->data; //将要出队的元素的数据赋给 x 

 Node* p=Q.fron; //将队首指针赋给临时结点 

 Q.fron =p->next; //使队首指向下下个结点(出队单元的下一个单元) 

 delete p; //释放出队单元的空间 

 if(Q.fron==NULL) //如果队首为空 

 {

  Q.rear==NULL; //将队尾也指向空(变为初始状态) 

 }

 return x; //返回出队元素的数据 

}

void traverse(Queue& Q) //遍历栈 

{

 if(Q.fron==NULL) //判空 

 {

  cout<<"队列为空";

  return; 

 }

 else

 {

  Node* p=Q.fron ; //将队首指针赋给临时结点(为了不改变队首的指向) 

  while(p!=NULL) //判空 

  {

   cout<<p->data<<" "; //输出当前节点的数据 

   p=p->next; //改变指向(指向下一个结点) 

  }

  cout<<endl;

 }

}

int main()

{

 int a[100],i,n; //定义变量 

 Queue Q; //创建队列 

 Zero(Q); //初始化队列 

 cout<<"输入入队数据的个数:";

 cin>>n;

 for(i=0;i<n;i++) //入队 

 {

  cin>>a[i];

  Push(Q,a[i]);

 }

 cout<<"此时队列元素为:";

 traverse(Q); //遍历队列 

 cout<<"输入出队数据的个数:";

 cin>>n;

 for(i=0;i<n;i++) //出队 

 {

  cout<<pop(Q)<<"出队"<<" ";

  if(i==n-1) cout<<endl;

 }

 cout<<"此时队列元素为:";

 traverse(Q); //遍历队列 

 cout<<"输入入队数据的个数:";

 cin>>n;

 for(i=0;i<n;i++) //入队 

 {

  cin>>a[i];

  Push(Q,a[i]);

 }

  cout<<"此时队列元素为:";

 traverse(Q); //遍历队列 

 return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值