第四期 02季 C/C++数据结构 链队列的基本操作

本期关注点当然是我们的队列,队列是先进先出的。(本季链队列操作)

本次实训关注点在于链队列,操作代码如下:

#include <iostream>
using namespace std;

typedef struct QNode {
	char data;
	struct QNode* next;
}QNode,*QueuePtr;		//结点类型 指针类型 QueuePtr为指向结构体QNode的指针型

typedef struct {
	QueuePtr front;
	QueuePtr rear;
}LinkQueue;				//链队列

void InitQNode(LinkQueue &Q) {
	Q.front = Q.rear = new QNode;	//生成新结点作为头结点,队头和队尾指针指向此结点    /单链表:新生一个结点指向此结点
	if (!Q.front){
		cout << "获取空间失败!未完成初始化。" << endl;
	}
	else {
		Q.front->next = NULL;			//新生头结点指针域置空
		cout << "初始化成功。 " << endl;
	}
}
void PushQueue(LinkQueue &Q) {		//入队
	QNode* p;
	cout << "输入入队的个数:";
	int n; cin >> n;
	cout << "入队的元素为:";
	for (int i = 0; i < n; i++){
		p = new QNode;
		char e; cin >> e;
		p->data = e;
		p->next = NULL;			//新建一个结点 为了接在尾指针后面

		Q.rear->next = p;		//1.修改尾指针  将链队列的最后一个元素的下一个指向新建的p结点
		Q.rear = p;				//将队列的最后一个直接指向p//将队列p作为最后一个元素		
	}	
}

void PopQueue(LinkQueue& Q) {		//出队
	QNode* p;
	cout << "输入出队的个数:";
	int n; cin >> n;
	cout << "出队元素为:";
	char e; 
	for (int i = 0; i < n; i++) {
		if (Q.front==Q.rear){			//判断是否为空
			cout << "队列内无元素,无法出栈!";
		}
		else {
			p = new QNode;				//新创结点,存出队列元素
			p = Q.front->next;			//将第一个元素赋值给p
			e = p->data;				//第一个元素赋值给e
			cout << e;
			Q.front->next = p->next;	//将p 的下一个最为第一个元素
			if (Q.rear == p) {			//如果遇到最后一个指针,删除结点,并让头尾结点指向头结点
				Q.front = Q.rear;
			}
			delete p;
		}
	}
	cout << endl;
}
void GetHead(LinkQueue &Q) {
	if (Q.front!=Q.rear){
		cout << "队头元素为:" << Q.front->next->data << endl;
	}
	else
	{
		cout << "队列为空,无头元素!" << endl;
	}
}
void DesQueue(LinkQueue& Q) {
	QNode* p;
	while (Q.front) {
		p = Q.front->next;				//实现将 Q.front->next给新的结点p
		delete Q.front;					//在将Q.front销毁
		Q.front = p;				//在将结点p赋值给Q.front(Q.front结点指向p)
	}
	cout << "销毁成功" << endl;
}
int main() {
	LinkQueue Q;
	cout << "1.";
	InitQNode(Q);

	cout << "2.";
	PushQueue(Q);

	cout << "3.";
	PopQueue(Q);
	cout << "4.";
	GetHead(Q);
	cout << "5.";
	DesQueue(Q);
}

代码运行截图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赵相机~

谢谢你,调试、讲解私聊我~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值