【#yyds干货盘点# PTA数据结构(C++版)——7-1 队列的实现及基本操作(链栈实现,无上限)】满堂花醉三千客,一剑霜寒十四州。这篇文章主要讲述#yyds干货盘点# PTA数据结构(C++版)——7-1 队列的实现及基本操作(链栈实现,无上限)相关的知识,希望能为你提供帮助。
1.编译运行
文章图片
2.题目:
- 输入格式:
- 输出格式:
- 输入样例:
- 输出样例:
- 队列的链式存储结构
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;
}
推荐阅读
- 100行代码,轻松搞定文本编辑器中草稿箱
- xp系统电脑运行缓慢如何优化进程速度更快?
- XP系统还原失败是啥原因引起的问题?
- xp系统电脑回收站不能清理总是提示无法清空怎样处理?
- 安装系统 xp系统重装系统后感觉特别卡的多种原因?
- xp虚拟内存造成电脑死机的几种处理办法?
- xp系统如何更快的提升运行速度保证电脑运行
- windows xp系统提示网络连接失败有几种原因并如何处理?
- xp系统word文档密码忘了怎样暴力破解?