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

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

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

实验目的:

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>usingnamespace std;typedefint datatype;//节点成员变量的建立typedefstructQNode{ datatype data;structQNode* Next;}QNode,*QueuePtr;//匿名结构体,成员变量为队列首尾指针struct{ QueuePtr front =NULL; QueuePtr rear =NULL;}Ptr;//开辟一个新节点 QNode*BuyNode(datatype x){ QNode* newnode =(QNode*)malloc(sizeof(QNode));if(newnode ==NULL)returnNULL;else{ newnode->data = x; newnode->Next =NULL;}return newnode;}//初始化头节点voidInitHead(QueuePtr head){ head =BuyNode(0); Ptr.front = head; Ptr.rear = head;}//销毁链式队列voidDestroyQueue(QueuePtr head){ QueuePtr pcur = head;while(pcur){ QueuePtr next = pcur->Next;free(pcur); pcur = next;}}//队列插入元素的实现(即入队列)voidpush(datatype x){ QueuePtr node =BuyNode(x); Ptr.rear->Next = node; Ptr.rear = node;}//队列元素的删除(即头删)voidpop(){ QueuePtr del = Ptr.front->Next;if(del ==NULL)return;else{ QueuePtr next = del->Next; Ptr.front->Next = next;free(del); del =NULL;}}//判空boolEmptyQueue(){if(Ptr.front->Next ==NULL)returntrue;elsereturnfalse;}//获取队列首元素(即出队列) datatype GetHead(){if(Ptr.front->Next ==NULL)return0;elsereturn Ptr.front->Next->data;}//队列当前元素个数intSizeQueue(){int count =0; QueuePtr pcur = Ptr.front->Next;while(pcur){ count++; QueuePtr next = pcur->Next; pcur = pcur->Next;}return count;}intmain(){ 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();return0;}

实验三传送门

Read more

【探寻C++之旅】第十四章:简单实现set和map

【探寻C++之旅】第十四章:简单实现set和map

请君浏览 * 前言 * 1. 分析源码 * 2.修改红黑树 * 2.1 参数 * 2.2 迭代器 * 2.3 map支持[] * 2.4 代码实现 * 3. 实现map和set * 3.1 set * 3.2 map * 4. 小结 * 4.1 **深化对数据结构的理解** * 4.2 **强化 “抽象与复用” 的编程思维** * 尾声 前言 今天,我们继续踏入追寻C++的冒险历程。上一章我们讲解了红黑树,那么本章我们将通过红黑树去模拟实现一下STL库中的set和map这两类容器,主要的目的是让我们更加的理解红黑树以及set和map的使用原理。下面让我们一起来进入本章的学习。 1. 分析源码 map和set我们在之前已经了解过了,这里不再过多赘述。我们知道map和set在STL库中是由红黑树来实现的,

By Ne0inhk
C++之基于正倒排索引的Boost搜索引擎项目数据清洗代码及详解(下)

C++之基于正倒排索引的Boost搜索引擎项目数据清洗代码及详解(下)

1.  第一步详解 我们要使用到boost里面filesystem这个命名空间里面的函数,所以我在这里先给它取个别名。然后我们把src_path里面的路径交给root_path。接着我们判断这个路径是否存在,如果不存在那就直接结束代码。接着我们通过迭代器循环的方式来对root_path里面的每一个文件。 第一个if用来判断是否是普通文件,第二个if来判断文件的扩展名是否为 .html,接着走到最后就书面是扩展名为 .html的普通文件。然后我们就把它的路径转化为string类型。 注意:在这里不可以把.string()换成to_string()。这是因为: .string() 是 std::filesystem::path 类的成员函数,专门用于将路径对象转换为 std::string 类型的字符串(返回路径的字符串表示)。to_string() 是 C++ 标准库中的全局函数(或针对基础类型的重载),用于将数值类型(如 int、double 等)转换为字符串,不能直接用于路径对象。 bool EnumFile(const

By Ne0inhk
从C到C++:第二站——引用与C++11新特性核心解析

从C到C++:第二站——引用与C++11新特性核心解析

✨从C到C++:第二站——引用与C++11新特性核心解析✨ 继上一篇讲解C++关键字与命名空间后,本次聚焦C++对C语言的核心扩展点——引用,同时补充内联函数、auto关键字、范围for循环、nullptr等高频实用特性,这些知识点既是C++入门的关键,也是解决C语言语法痛点、提升代码效率和可读性的核心手段,更是后续学习类与对象、模板的重要基础。 博客前置链接:从C到C++:第一站——关键字与命名空间 一、引用:变量的“专属别名” 📛 引用是C++对C语言最经典的扩展之一,彻底简化了C语言指针的繁琐操作,是C++编程中高效、安全的代名词,也是后续运算符重载、类成员操作的核心语法。 1.1 引用的基本概念 引用不是新定义变量,而是给已存在的变量起一个新名字,编译器不会为引用开辟独立内存空间,引用和它的原变量共用同一块内存,对引用的所有操作,本质都是对原变量的操作。 语法格式:类型& 引用变量名 = 引用实体; #include&

By Ne0inhk
Redis 解锁:C++ 实战深度探索 Set 数据类型

Redis 解锁:C++ 实战深度探索 Set 数据类型

前言 欢迎来到 Redis Set 的终极指南。如果您曾需要管理一组独一无二的元素集合——无论是用户 ID、文章标签还是邮件地址——并希望以闪电般的速度对其执行强大的集合运算,那么您来对地方了。Redis Set 绝不是一个简单的列表,它是一种精妙的数据结构,将数学中强大的集合理论直接带入您的高性能数据库中。 在本文中,我们将从最基础的概念讲起,逐步深入到高级的实际应用。我们将使用优秀的 C++ 库 redis-plus-plus 来演示所有示例,并逐行剖析代码。无论您是 C++ 开发者、后端工程师,还是仅仅对 Redis 感到好奇,读完本文,您都将深刻理解是什么让 Set 成为 Redis 中功能最丰富的工具之一。 Redis Set 究竟是什么? 在我们深入代码之前,先来建立一个清晰的思维模型。想象你有一个魔力袋,你可以往里面扔东西,但这个袋子有两条非常特殊的规则: 1. 强制保持唯一:这个袋子会自动拒绝重复的物品。如果你想把一个标有“

By Ne0inhk