当前位置: 首页 > article >正文

【数据结构】宜宾大学-计院-实验五

实验五 栈和队列(队列的基本操作)

  • 实验目的:
    • 链表结点结构:
    • 实验结果:
      • 运行截图:
      • 代码实现:

实验目的:

1.掌握队列的顺序存储结构和链式存储结构
2.实现队列的基本操作,包括队列的建立、入队列、出队列、判断队列是否空等
实验内容:
1.完成链队列的建立
2.实现链队列的入队操作
3.实现链队列的出队列操作
4.实现判断链队列是否为空
5.实现销毁链队列
6.自己设计一组数据,模拟入队列,出队列

链表结点结构:

typedef struct QNode
{
int data;
struct QNode *Next;
}QNode,*QueuePtr;
队列结构:
struct
{
QueuePtr front;
QueuePtr rear;
}Ptr;

实验结果:

每个同学都要记录实验结果(无论对与错),如果程序调试中有什么错误,记录并分析原因,必须另寻时间调试成功。
实验报告:(及时撰写实验报告)

答:代码有点挫,但能正确跑,遇到的问题都解决了

运行截图:

在这里插入图片描述

代码实现:

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;

typedef int datatype;
//节点成员变量的建立
typedef struct QNode
{
	datatype data;
	struct QNode* Next;
}QNode, *QueuePtr;

//匿名结构体,成员变量为队列首尾指针
struct
{
	QueuePtr front = NULL;
	QueuePtr rear = NULL;
}Ptr;

//开辟一个新节点
QNode* BuyNode(datatype x)
{
	QNode* newnode = (QNode*)malloc(sizeof(QNode));
	if (newnode == NULL) return NULL;
	else
	{
		newnode->data = x;
		newnode->Next = NULL;
	}
	return newnode;
}

//初始化头节点
void InitHead(QueuePtr head)
{
	head = BuyNode(0);
	Ptr.front = head;
	Ptr.rear = head;
}

//销毁链式队列
void DestroyQueue(QueuePtr head)
{
	QueuePtr pcur = head;
	while (pcur)
	{
		QueuePtr next = pcur->Next;
		free(pcur);
		pcur = next;
	}
}

//队列插入元素的实现(即入队列)
void push(datatype x)
{
	QueuePtr node = BuyNode(x);
	Ptr.rear->Next = node;
	Ptr.rear = node;
}

//队列元素的删除(即头删)
void pop()
{
	QueuePtr del = Ptr.front->Next;
	if (del == NULL)
	return;
	else
	{
		QueuePtr next = del->Next;
		Ptr.front->Next = next;

		free(del);
		del = NULL;
	}
}

//判空
bool EmptyQueue()
{
	if (Ptr.front->Next == NULL)
		return true;
	else
		return false;
}

//获取队列首元素(即出队列)
datatype GetHead()
{
	if (Ptr.front->Next == NULL)
	return 0;
	else
	return Ptr.front->Next->data;
}

//队列当前元素个数
int SizeQueue()
{
	int count = 0;
	QueuePtr pcur = Ptr.front->Next;
	while (pcur)
	{
		count++;
		QueuePtr next = pcur->Next;
		pcur = pcur->Next;
	}
	return count;
}

int main()
{
	QueuePtr head = NULL;
	InitHead(head);
	push(1);
	push(2);
	push(3);
	push(4);
	push(5);
	push(6);
	push(7);
	push(8);

	cout << "队列中当前元素的个数:" << SizeQueue() << endl << endl;
	cout << "依次输出队列中所有元素:" << endl;
	while (!EmptyQueue())
	{
		cout << GetHead() << " ";
		pop();
	}
	cout << endl << endl;
	cout << "销毁队列:" << endl;
	DestroyQueue(head);
	cout << "销毁队列后队列中的元素个数:" << SizeQueue();
	return 0;
}

实验三传送门


http://www.kler.cn/news/367338.html

相关文章:

  • 深度优先算法(DFS)洛谷P1683-入门
  • 100种算法【Python版】第14篇——Pollard‘s Rho 质因数分解算法
  • Flutter鸿蒙next 中如何实现 WebView【跳、显、适、反】等一些基础问题
  • 系统聚类比较——最短距离法、最长距离法、重心法和类平均法
  • iOS AVAudioSession 详解【音乐播放器的配置】
  • 传输层UDP
  • 《车辆损毁数据评估方案全指南》
  • OTP一次性密码、多因子认证笔记
  • Java Web项目实战:从零基础到项目开发全流程
  • 力扣10.26
  • 标题:自动化运维:现代IT运维的革新力量
  • 基于SpringBoot+Vue在线课程管理系统(源码+部署说明+演示视频+源码介绍)
  • 国内大语言模型哪家更好用?
  • SMA-BP时序预测 | Matlab实现SMA-BP黏菌算法优化BP神经网络时间序列预测
  • 扩散策略的变体与改进:从3D扩散策略到赋能人形机器人的iDP3(含Diff-Control和ControlNet详解)
  • Django 项目的创建
  • 微软发布 Win11 22H2/23H2 十月可选更新KB5044380!
  • Mybatis工作原理
  • Flink-cdc Schema Evolution 详解
  • 聊聊Web3D 发展趋势
  • 信息学奥赛后的发展路径:科技创新、竞赛选拔还是学术研究?
  • 短信验证码发送实现(详细教程)
  • bug记录, 构造与赋值???zzg::list<int> l; l = { 1, 2, 3 };为什么没写对应的赋值函数却可以跑?
  • Rust中的Send和Sync特征:确保并发安全
  • STM32硬件平台
  • Android——事件冲突处理