首页 > 其他分享 >数据结构-----------栈和队列后续

数据结构-----------栈和队列后续

时间:2024-10-23 16:48:04浏览次数:8  
标签:pq 队列 next ----------- tail phead 数据结构 size

1 队列

1.1概念与结构

概念:只允许在一端进行插入数据操作,在另一端进行删除元素特殊的线性表,队列具有先进先出的性质

入队列:进行插入操作的的一端叫做队尾

出队列:进行删除操作的一端叫做队头

下面我们来看一下队列的实现队列其实跟单链表是差不多的只不过队列只允许在队尾插入数据哎对头进行删除等操作

typedef int SlDatatype;

typedef struct Quenenode {
	SlDatatype data;
	struct Quenenode* next;
	
}quenen;

typedef struct quene {
	quenen* phead;
	quenen* tail;
	int size;
}que;

首先要声明一个结构体结点里面有数据和指向下一个结点的指针,后面要创建队列里面要包含一个头指向队头,然后让尾指向队尾,size是队伍里面的有效数据。

初始化:

void qinit(que* pq)
{
	assert(pq);
	pq->phead = pq->tail = NULL;
	pq->size = 0;
}

首先让tou和尾都指向空然后size的数据为0;

队列的销毁

void destoryque(que* pq)
{
	assert(pq);
	assert(!quemptu(pq));
	quenen *head = pq->phead;
	while (head)
	{
		quenen* next = head->next;
		free(head);
		head = next;
	}
	pq->phead = pq->tail = NULL;
	pq->size = 0;
}

我们像操作系统申请的空间最后都需要释放掉首先定义一个指针接受头然后去遍历去销毁最后让头和尾都指向空把size的大小变成0;

入队

void inserque(que* pq, SlDatatype x)
{
	assert(pq);
	quenen* newcode = (quenen*)malloc(sizeof(quenen));
	if(newcode == NULL)
	{
		perror("malloc fail");
		exit(1);
	}
	newcode->data = x;
	newcode->next = NULL;
	if (pq->phead == NULL)
	{
		pq->phead = pq->tail = newcode;
	}
	else
	{
		pq->tail->next = newcode;
		pq->tail = pq->tail->next;
	}
	pq->size++;
}

首先我们要去malloc一个空间然后判断队列是否为空如果为空的话对头和队尾指向的都是同一个地方如果不是的话就让队尾的下next指向我们申请的一个结点,然后让tail往后走,然后插入一个让size++这样就可以拿到队伍的有效数据;

判断队列是否为空

bool quemptu(que* pq)
{
	assert(pq); 
	return pq->phead == NULL;
}

如果对头为空的话那么这个队列就为空;

查找队列有效个数

int quenesize(que* pq)
{ 
	return pq->size;
}

因为我们在插入数据的时候就对size进行了操作所以这里面直接return size的大小就是队列的个数

出队列

void popqueue(que* pq)
{
	assert(pq);
	assert(!quemptu(pq));
	if (pq->phead == pq->tail)
	{
		free(pq->phead);
		pq->phead = pq->tail = NULL;
	}
	else
	{
		quenen* next = pq->phead->next;
		free(pq->phead);
		pq->phead = next;
	}
	pq->size--;
}

首先要判断队列是否为空,然后如果头和尾指向一个地方直接free对头然后让对头和队尾指向空

如果不是指向同一个地方就定义一个指针让他接受头结点的下一个位置然后去释放头结点在让头结点走到下一个节点的位置然后又size有效数据减减;

取对头

SlDatatype  datafront(que* pq)
{
	assert(pq);
	assert(!quemptu(pq));
	return pq->phead->data;
}

因为队列的性质所以取对头直接取头结点里面的数据就行了

取队尾数据

SlDatatype databack(que* pq)
{
	assert(pq);
	assert(!quemptu(pq));
	return pq->tail->data;
}

标签:pq,队列,next,-----------,tail,phead,数据结构,size
From: https://blog.csdn.net/qwer55588/article/details/143167154

相关文章

  • 下载并部署数据自动标注工具X-AnyLabeling
    目录项目介绍代码下载与环境配置使用自动标注导入自己模型标注效果展示官方连接:https://github.com/CVHub520/X-AnyLabeling如果打不开官方连接可以直接下载上方☝我的文件夹。项目介绍    此项目是用于数据方面的标注工具,其包含目标检测、关键点检测、文字......
  • 【数据结构】队列(环形缓冲区)的实现
    在学习驱动的过程中,接触到了环形缓冲区的概念,发现这个缓冲区和数据结构中的队列具有惊人的相似之处,因此借此来复习相关知识如果应用层来不及读取数据时,我们可以先将数据放入环形缓冲区中用来记录数据,防止数据丢失。当然,缓冲区越大,那么可以缓存的数据就越多。1.队列的定义队......
  • 20222316 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    一、实验内容1.学习总结——后门与免杀1)后门基本概念后门就是不经过正常认证流程而访问系统的通道。狭义后门:特指潜伏于操作系统中专门做后门的一个程序,“坏人”可以连接这个程序,远程执行各种指令。后面类型有编译器后门、操作系统后门、应用程序后门、潜伏于操作系统中或......
  • SM2 - 公钥加密算法
    符号A,B:使用公钥密码系统的两个用户。\(a,b\):\(F_q\)中的元素,他们定义\(F_q\)上的一条椭圆曲线\(E\)。\(d_B\):用户B的私钥。\(E⁡(F_q)\):\(F_q\)上椭圆曲线\(E\)的所有有理点(包括无穷远点\(O\))组成的集合。\(F_q\):包含\(q\)个元素的有限域。\(G\):椭圆曲线的一个基点,其阶为......
  • ARM嵌入式学习--第五天
    ARM核的异常处理-ARM核的8种异常源-reset--复位异常    描述:在内核复位时执行  优先级:1级  模式:SVC(管理模式)-undefined instruction--未定义指令异常  描述:流水线执行非法指令产生,该异常发生在流水线译码阶段,如果当前指令不能被识别为有效指令,将会......
  • 安工PTA自主智能体1-10题python
    7-1jmu-Java&Python-统计一段文字中的单词个数并按单词的字母顺序排序后输出a=input()b=[]whilea!="!!!!!":a=a.split()foriinrange(len(a)):b.append(a[i])a=input()b=list(set(b))b=sorted(b)print(len(b))iflen(b)<......
  • LeetCode刷题-移除元素
    给你一个数组nums和一个值val,你需要原地移除所有数值等于val的元素。元素的顺序可能发生改变。然后返回nums中与val不同的元素的数量。假设nums中不等于val的元素数量为k,要通过此题,您需要执行以下操作:更改nums数组,使nums的前k个元素包含不等于val的......
  • ssts-hospital-web-master项目实战记录四:主要配置
    记录时间:2024-10-231.配置浏览器自动打开配置文件:package.json "scripts":{  "dev":"vite--open" } 2.配置src别名(1)安装@types/node输入npm命令npm i@types/node--save-dev(2)配置文件:vite.config.tsimport{defineConfig}from'vi......
  • 小结---安装nvm解决node版本不兼容的问题(node版本切换)
    1、卸载node(如果电脑上没有安装node略过即可)在控制面板找到node.js卸载并将c盘的node文件等全部删除最后打开高级设置,找到高级系统设置将配置的node字段全部删除 2、nvm安装官网下载nvm包https://github.com/coreybutler/nvm-windows/releases2.安装n......
  • 【Unity】发布微信小游戏-资源优化
    资源优化方向记录:1、首包场景里面使用的字体重新生成一个,只包含首包可能使用到的字符,可以将几M的字体缩到几时KB 2、减少大尺寸贴图使用,合理压缩图片格式3、使用AssetStudio等工具检查首包资源,查看包含了那部分资源,是否引用,是否过大 这里查到了一部分无使用的资源贴图......