#yyds干货盘点# PTA数据结构(C++版)——7-1 队列的实现及基本操作(链栈实现,无上限)

【#yyds干货盘点# PTA数据结构(C++版)——7-1 队列的实现及基本操作(链栈实现,无上限)】满堂花醉三千客,一剑霜寒十四州。这篇文章主要讲述#yyds干货盘点# PTA数据结构(C++版)——7-1 队列的实现及基本操作(链栈实现,无上限)相关的知识,希望能为你提供帮助。
1.编译运行

#yyds干货盘点# PTA数据结构(C++版)——7-1 队列的实现及基本操作(链栈实现,无上限)

文章图片

2.题目:
  • 输入格式:
  • 输出格式:
  • 输入样例:
在这里给出一组输入。例如:
  • 输出样例:
3.代码块
  • 队列的链式存储结构
typedef struct QNode{ QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; //队头指针 QueuePtr rear; //队尾指针 }LinkQueue;

  • 链队的初始化
Status InitQueue(LinkQueue & Q){ //生成新结点作为头结点,队头和队尾指针指向此结点 Q.front = Q.rear=new QNode; //头结点的指针域为空 Q.front-> next = NULL; return Ok; }

  • 链队的入队
Status EnQueue(LinkQueue & Q,QElemType e){ //插入元素e为Q的新的队尾元素 //为入队元素分配结点空间,用指针P指向 QNode *p=new QNode; //新结点的数据域为e p-> data = https://www.songbingjia.com/android/e; //将新结点插入到队尾 p-> next = NULL; //修改队尾指针 Q.rear-> next = p; Q.rear = p; return Ok; }

  • 链队的出队
Status DeQueue(LinkQueue & Q,QElemType & e){ //删除Q的队头元素,用e返回其值 //若队列为空,则返回Error if(Q.front==Q.rear) return Error; //p指向队头元素 QNode *p=Q.front-> next; //e保存队头元素的值 e=p-> data; //修改头结点的指针域 Q.front-> next = p-> next; //最后一个元素被删,队尾指针指向头结点 if(Q.rear == p) Q.rear =Q.front; //释放原队头元素的空间 delete p; return Ok; }

  • 取链队的头元素
SElemType GetHead(LinkQueue Q){ //返回Q的队头元素,不修改指针 //队列非空 if(Q.front!=Q.rear){ //返回队头元素的值,队头指针不变 return Q.front-> next-> data; } }

4.源码
#include< iostream> using namespace std; typedef int QElemType; typedef int SElemType; typedef int Status; #define Ok 1 #define Error 0 //队列的链式存储结构 typedef struct QNode{ QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; //队头指针 QueuePtr rear; //队尾指针 }LinkQueue; //链队的初始化 Status InitQueue(LinkQueue & Q){ //生成新结点作为头结点,队头和队尾指针指向此结点 Q.front = Q.rear=new QNode; //头结点的指针域为空 Q.front-> next = NULL; return Ok; }//链队的入队 Status EnQueue(LinkQueue & Q,QElemType e){ //插入元素e为Q的新的队尾元素 //为入队元素分配结点空间,用指针P指向 QNode *p=new QNode; //新结点的数据域为e p-> data = https://www.songbingjia.com/android/e; //将新结点插入到队尾 p-> next = NULL; //修改队尾指针 Q.rear-> next = p; Q.rear = p; return Ok; } //链队的出队 Status DeQueue(LinkQueue & Q,QElemType & e){ //删除Q的队头元素,用e返回其值 //若队列为空,则返回Error if(Q.front==Q.rear) return Error; //p指向队头元素 QNode *p=Q.front-> next; //e保存队头元素的值 e=p-> data; //修改头结点的指针域 Q.front-> next = p-> next; //最后一个元素被删,队尾指针指向头结点 if(Q.rear == p) Q.rear =Q.front; //释放原队头元素的空间 delete p; return Ok; } //取链队的头元素 SElemType GetHead(LinkQueue Q){ //返回Q的队头元素,不修改指针 //队列非空 if(Q.front!=Q.rear){ //返回队头元素的值,队头指针不变 return Q.front-> next-> data; } } int main(){ QElemType e; LinkQueue Q; InitQueue(Q); int n,b; cin> > n; while(n--> 0){ cin> > b; if(b==1){ cin> > b; EnQueue(Q,b); } if(b==0){ if(Q.front==Q.rear) cout< <"invalid"< < endl; else{ DeQueue(Q,b); cout< < b< < endl; } } } return 0; }


    推荐阅读