顺序队列和链队列的各种操作

实验3:栈和队列的基本操作实现及其应用——顺序栈和链栈 实验3:栈和队列的基本操作实现及其应用一、实验目的1、   熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。2、      学会使用栈和队列解决实际问题。二、实验内容1、自己确定结点的具体数据类型和问题规模:分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。分别建立一个顺序队列和链队列,实现队列的入队和出队操作。2、设计算法并写出代码,实现一个十将二进制转换成2进制数。3、选... 阅读详情

一. 先说顺序队列

/***********************************************************
顺序队列的各种操作13-4-1.cpp
1.初始化队列
2.判断队空与否
3.取队头元素
4.入队
5.出队
6.主函数测试以上功能
***********************************************************/
#include<stdio.h>
#include<stdlib.h>

#define MAX	1000
typedef struct
{
	int data[MAX];
	int front;
	int rear;
}SeQueue;

void InitQueue(SeQueue *SQ)
{
	SQ->front=SQ->rear=0;
}

int EmptyQueue(SeQueue *SQ)
{
	if(SQ->front==SQ->rear)
	{
		printf("\n队空!\n");
		return 1;
	}
	return 0;
}

int GetFront(SeQueue *SQ, int *x)
{
	if(EmptyQueue(SQ))
	{
		printf("队空!\n");
		return 0;
	}
	*x=SQ->data[(SQ->front+1)%MAX];
	return 1;
}

int EnQueue(SeQueue *SQ, int x)
{
	if(SQ->front==(SQ->rear+1)%MAX)
	{
		printf("队满!\n");
		return 0;
	}
	SQ->rear=(SQ->rear+1)%MAX;
	SQ->data[SQ->rear]=x;
	return 1;
}

int OutQueue(SeQueue *SQ, int *x)
{
	if(EmptyQueue(SQ))
	{
		printf("队空!\n");
		return 0;
	}
	SQ->front=(SQ->front+1)%MAX;
	*x=SQ->data[SQ->front];
	return 1;
}

int main()
{
	SeQueue *Q;
	Q=(SeQueue *)malloc(sizeof(SeQueue));
	int x, fx;
	int n;
	int j;
	InitQueue(Q);
	printf("输入入队元素个数n:\n");
	scanf("%d", &n);
	for(int i=1; i<=n; i++)
	{
		EnQueue(Q, i);
	}
	GetFront(Q, &fx);
	printf("队头元素:%d\n", fx);
	printf("输出队列元素:\n");
	for(j=Q->front+1;j<=Q->rear;j=(j+1)%MAX)
	{
		printf("%3d",Q->data[j]);	
	}

	for(int i=1; i<=n; i++)
	{
		OutQueue(Q, &x);
		printf("\n出队元素:%d\n", x);
	}
	system("pause");
	return 0;
}

二.再说链队列

/***********************************************************
链队列的各种操作13-4-2.cpp
1.初始化队列
2.判断队空与否
3.取队头元素
4.入队
5.出队
6.主函数测试以上功能
***********************************************************/
#include<stdio.h>
#include<stdlib.h>

typedef struct Lnode
{
	int data;
	struct Lnode *next;
}LinkList;

typedef struct
{
	LinkList *front;
	LinkList *rear;
}LinkQueue;

int InQueue(LinkQueue *LQ)
{
	LinkList *p=(LinkList*)malloc(sizeof(LinkList));
	if(p==NULL)
	{
		printf("初始化失败!\n");
		return 0;
	}
	p->next=NULL;
	LQ->front=LQ->rear=p;
	return 1;
}

int EmptyQueue(LinkQueue *LQ)
{
	if(LQ->front==LQ->rear)
	{
		printf("队列空!\n");
		return 1;
	}
	return 0;
}

int EnQueue(LinkQueue *LQ, int x)
{
	LinkList *s=(LinkList *)malloc(sizeof(LinkList));
	if(s==NULL)
	{
		printf("分配空间失败!\n");
		return 0;
	}
	s->data=x;
	s->next=NULL;
	LQ->rear->next=s;
	LQ->rear=s;
	return 1;
}

int GetFront(LinkQueue *LQ, int *x)
{
	if(EmptyQueue(LQ))
	{
		printf("队空!\n");
		return 0;
	}
	*x=LQ->front->next->data;
	return 1;
}

int OutQueue(LinkQueue *LQ, int *x)
{
	LinkList *p;
	if(EmptyQueue(LQ))
	{
		printf("队空!\n");
		return 0;
	}
	p=LQ->front->next;
	*x=p->data;
	LQ->front->next=p->next;
	if(LQ->front->next==NULL)
	{
		LQ->rear=LQ->front;
	}
	free(p);
	return 1;
}

int main()
{
	LinkQueue *Q;
	Q=(LinkQueue *)malloc(sizeof(LinkQueue));
	LinkList *p;
	int n, x, fx;
	InQueue(Q);
	printf("请输入入队元素个数n:\n");
	scanf("%d",&n);
	for(int i=1; i<=n; i++)
	{
		EnQueue(Q, i);
	}

	GetFront(Q, &fx);
	printf("队首元素:%d\n", fx);

	printf("输出队列元素:\n");
	for(p=Q->front->next; p!=NULL; p=p->next)
	{
		printf("%3d", p->data);
	}
	for(int i=1; i<=n; i++)
	{
		OutQueue(Q, &x);
		printf("\n出队元素:%d\n", x);
	}

	system("pause");
	return 0;
}
注意://1)链队列入队的死或坏,这个跟顺序队列入队就不一样了,顺序队列入队要先判断队满与否,因为数组有边界,但是链队列是用链表存储的,没有边界,所以不用判断队列满
//2)与顺序队列一样,出队要判断队空与否。)出队和GetFront非常像。
//3)出队的时候,front一直没有变,只不过是把front的Next给做掉了。
	//4)这个链队列出队要注意如果只剩下一个节点情况(删除完之后LQ->front->next==NULL),这是LQ->rear是游离的,一定要将LQ->front赋给rear

运行结果截图:



多孔材料吸附性质模拟程序RASPA的离线和在线安装方法 RASPA-2.0是今年美国西北大学教授Randall Q. Snurr等人开发的针对于MC,MD,分子力学优化等用途的程序,相比于之前开发的MUSIC软件,RASPA的功能更加齐全,操作更加简便,可以在MC的吸附过程中考虑骨架的柔性,也可以想MUSIC一样先制作积分格点(music中的map)。 A、离线安装(centos为例): (1)、安装之前要检查一下是否装了automake, 阅读详情

相关推荐

使用python获取同花顺免费版和同花顺远航版自选股数据用于量化交易

在做量化交易时,有时需要在盘中实时监控同花顺自选股的数量,以便灵活地自定义提醒、捕捉买卖时点等。那么,如何使用python获取同花顺自选股数据呢?

tzzqn2008的专栏 3682

带头结点的链队列的基本操作

带头结点的链队列的基本操作

weixin_74284832的博客 281

水气泵控制原理,三角波发生电路,LM331M/TR芯片,高速运放芯片

气泵的控制采用闭环控制,根据气泵的FG反馈信号进行反馈调节,由于气泵的反馈信号是脉冲反馈,即频率改变,占空比不变,即需要通过F/V转换芯片转换成电压信号,变为电压与转速成正比,其电压进入比较器与基准电压进行比较,将比较结果进行运算并进行PWM控制信号。水泵的控制采用闭环控制,根据水泵的pwm信号进行反馈调节,水泵的反馈信号是脉冲反馈,即频率改变,占空比不变,即需要通过F/V转换芯片转换成电压信号,变为电压与转速成反比,其电压进入比较器与基准电压进行比较,将比较结果进行运算并对PWM控制信号。

m0_51010122的博客 2856

6-2 带头结点的链式表操作集 (20 分)

本题要求实现带头结点的链式表操作集。 函数接口定义: List MakeEmpty(); Position Find( List L, ElementType X ); bool Insert( List L, ElementType X, Position P ); bool Delete( List L, Position P ); 其中List结构定义如下: typedef struct LNode *PtrToLNode; struct LNode { ElementType Data; PtrTo

小杨笔记 955

Android T GPS 定位流程

Gps 定位

好记性不如烂笔头 1355

【Android】汽车电源管理:深入解析CarPowerManager与Suspend To RAM的交互机制

本文深入解析了Android Automotive OS中CarPowerManager与Suspend To RAM(深度睡眠)的交互机制。详细阐述了从车辆发出睡眠请求,到CarPowerManagementService协调应用状态,最终通过内核进入低功耗睡眠的完整流程,并探讨了唤醒机制、开发者实践及功耗优化策略,为车机应用开发与系统优化提供关键指导。

weixin_28339967的博客 291

PTA 带头结点的链队列的基本操作(函数题)

6-1 带头结点的链队列的基本操作 (15 分) 实现链队列的入队列及出队列操作。 函数接口定义: Status QueueInsert(LinkQueue *Q,ElemType e); Status QueueDelete(LinkQueue *Q,ElemType *e); 其中 Q 和 e 都是用户传入的参数。 LinkQueue 的类型定义如下: typedef int ...

好学者的博客 5547

YOLO11实战 第001期-基于yolo11的CrowdHuman密集行人目标检测实战文档(yolo格式数据免费获取)

1.数据阶段在拥挤/遮挡场景下,使用crowdhuman数据集重训练后的yolo11,效果表现较好。crowdhuman数据集标签如下,有Head BBox、Visible BBox、Full BBox。如下图显示:数据集介绍CrowdHuman数据集是旷世发布的用于行人检测的数据集,图片数据大多来自于google搜索。CrowdHuman数据集数据量比较大,15000张,5000张,验证集4370张。训练集和验证集中共有470K个实例,约每张图片包含23个人,同时存在各种各样的遮挡。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 2163

【PTA】带头结点的链队列的基本操作 (10 分)

裁判测试程序样例: #include <stdio.h> #include<malloc.h> #define OK 1 #define ERROR 0 typedef int Status; typedef int ElemType; typedef struct LNode { ElemType data; struct LNode * next; }LNode,*LinkList; typedef struct { LinkList front,.

karshey的博客 2410

从‘能看’到‘好看’:用Seaborn调色板让你的热力图在PPT和论文中脱颖而出

本文探讨如何利用Seaborn调色板提升热力图在PPT和论文中的视觉效果,从视觉心理学和场景适配角度出发,提供学术与商业场景下的配色方案和实战代码。通过优化色彩选择,使数据可视化更具专业性和吸引力,帮助读者快速理解关键信息。

weixin_30755393的博客 246

Silvaco TCAD 半导体器件仿真全攻略:从入门到精通

本文介绍了Silvaco TCAD半导体器件仿真平台的核心功能与应用方法。主要内容包括: Silvaco TCAD的核心模块组成(ATHENA工艺仿真和ATLAS器件仿真)及其在半导体研发中的重要作用,能够通过数值仿真预测器件电学特性,显著降低研发成本。 环境配置要点,包括内存分配、文件目录管理和许可证验证,为仿真工作提供基础保障。 仿真核心概念:详细讲解了网格划分策略和物理模型选择原则,强调基于物理直觉的自适应加密网格方法。 以PN结二极管为例,提供了完整的仿真代码示例,涵盖从网格定义、掺杂设置到结果分析

huanghm88的专栏 201

带头结点的链队列的基本操作 (10 分)

实现链队列的入队列及出队列操作。 函数接口定义: Status QueueInsert(LinkQueue *Q,ElemType e); Status QueueDelete(LinkQueue *Q,ElemType *e); 其中 Q 和 e 都是用户传入的参数。 LinkQueue 的类型定义如下: typedef int ElemType; typedef struct LNode...

qq_43269093的博客 1万+

基于共识的捆绑算法CBBA在多无人机多任务调度中的实现

在捆绑过程中,每个无人机根据自己的任务清单和其他无人机的任务清单,确定一个被称为“束”的集合。通过合理的任务分配和无人机协作,CBBA算法能够实现最优的任务调度,提高了多无人机系统的效率和执行能力。在每一轮迭代中,无人机根据自己的当前任务和位置信息将任务清单发送给其他无人机,并接收其他无人机发送过来的任务清单。通过比较其他无人机的任务清单和自身的任务清单,每个无人机可以更新自己的任务分配情况。在这一步中,每个无人机根据自己选择的新任务,更新自身的任务清单,并将更新后的清单发送给其他无人机。

持续更新 1156

实验四 顺序栈和链队列的操作

实验四 顺序栈和链队列的操作 一.实验目的 1.掌握栈的顺序存储结构;验证顺序栈及其基本操作的实现;验证栈的操作特性。 2.掌握队列的链接存储结构;验证链队列的存储结构和基本操作的实现;验证队列的操作特性。 二.问题描述 1.建立一个空栈;对已建立的栈进行插入、删除、取栈顶元素等基本操作。 2.建立一个空队列;对已建立的队列进行插入、删除、取队列元素等基本操作。 三.

zuyan266的专栏 2431

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C++ 顺序循环队列和链队列的基本操作

实验5、链队列的基本操作 实验要求: (1)实验目的 通过该实验,使学生理解链队列的构造特点并灵活应用,掌握链队基本操作的编程实现,认识栈是在一端进行插入,在另一端进行删除集中操作的线性结构,掌握队列的“先入先出”操作特点,知道判断队列空和满的条件,进一步熟悉C语言中指针操作。 (2)实验内容 用链式存储结构,实现教材定义的队列的基本操作。 (3)参考界面 菜单中包括以下功能: 1.初始化队列,2.销毁队列,3.清空队列,4. 队列判空,5.求队列长度,6.获取队头元素,7.插入一个 元素,8.删除一个元素

ninini12386的博客 1615

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

顺序栈与链队列C语言实验报告,实验3:栈和队列的基本操作实现及其应用——顺序队列和链队列...

实验3:栈和队列的基本操作实现及其应用一、实验目的1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。2、 学会使用栈和队列解决实际问题。二、实验内容1、自己确定结点的具体数据类型和问题规模:分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。分别建立一个顺序队列和链队列,实现队列的入队和出队操作。2、设计算法并写出代码,实现一个十将二进制转换成2进制数。3、选...

weixin_28692867的博客 1791

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

顺序栈和链队列的建立及基本操作

顺序栈 栈是一种只允许在表的一端进行插入或删除操作的线性表,对栈元素的操作应符合先进后出的原则。只允许插入、删除操作的一端称为栈顶,另一端称为栈底。栈顶当前位置是一个栈顶指针动态指示的。插入操作称为进栈或入栈,删除操作称为退栈或出栈,当栈中没有任何元素时称为空栈。 栈不存在: base=NULL 栈空:top=base 栈满:top-base >= stacksize top指向压栈时下一个元素将要存放的位置 top减一指向弹栈时下一个元素的取值位置 1.实验内容 1.实现顺序栈初始化 2.实现顺

fireworks~~博客 719

顺序队列和链队列基本操作

链队列: /* 链队列 */ #include &lt;malloc.h&gt; #include &lt;iostream&gt; typedef int type; typedef bool status; typedef struct tyust { type data; struct tyust *next; }*node; struct queue { nod...

何解然_K|user 355

【数据结构】栈和队列的定义和基本操作 |入栈 |出栈 |入队 |出队 |顺序栈 |链栈 |循环队列 |链队列

栈和队列的定义和基本操作(初始化入栈出栈,入队出队)顺序栈、链栈顺序队列、循环队列、链队列循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。使用链式存储结构的队列,称为链队列本文主要介绍了栈和队列的定义和基本操作(初始化入栈出栈,入队出队)如果文章的论述或代码等出现错误,欢迎前来指正!

2301_77611317的博客 1074

队列-链队和顺序队的简单操作

队列学习笔记–链队和顺序队 1.队列(循环队列) 在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个整型变最 front 和 rear分别指示队列头元素及队列尾元素的位置(后面分别称为头指针和尾指针)。 每当插入新的队列尾元素时,尾指针 rear增1; 每当删除队列头元素时, 头指针 front增1。因此,在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。 循环队列可充分利用空间,且减少了时间复杂度,通过移动frong和rear

Li_Lei1的博客 1901

顺序栈和链队列的基本操作

队列遵循先进先出的原则,保证了元素的顺序性,先入队的元素先出队。但是只支持在两端进行操作,限制了数据的插入和删除方式 ,且不能直接访问队列中间的元素,需要依次出队才能访问。栈结构在递归算法的实现中具有重要作用,可以方便地保存和恢复函数调用的状态,但是栈只允许在栈顶进行插入和删除操作,限制了数据的操作方式。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

special_3的博客 851

【数据结构】顺序队列、循环队列、链队列的实现和相关操作

队列(queue)是只允许在一端进行插入操作,在另一端进行删除操作的线性表,队列的特点是允许插入的一端称为队尾(rear),允许删除的一端称为队头(front)。向队列中插入新的数据元素称为入队。从队列中删除队头元素称为出队。

m0_72895175的博客 679

队列——队列的定义及基本操作(顺序存储队列和链队列的初始化、入队、出队、判空等)

文章目录队列队列的存储队列的基本操作顺序存储下队列的基本操作实现循环队列链式存储下队列的基本操作实现 队列  队列(Queue)简称队,也是一种操作受限的线性表,只允许在表的一端进行插入而在表的另一端进行删除。向队列中插入元素称为入队或进队,删除元素称为出队或离队。最早进队的也是最早出队的,故其操作特性是先进先出FIFO(First In First Out),故又称为先进先出的线性表。 队头Front:允许删除的一端,又称队首。 队尾Rear:允许插入的一端。 队列的存储  队列的存储一般分为两种:

薛定谔的猫的博客 1万+

实验3:栈和队列的基本操作实现及其应用——顺序队列和链队列

实验3:栈和队列的基本操作实现及其应用一、实验目的1、   熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。2、      学会使用栈和队列解决实际问题。二、实验内容1、自己确定结点的具体数据类型和问题规模:分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。分别建立一个顺序队列和链队列,实现队列的入队和出队操作。2、设计算法并写出代码,实现一个十将二进制转换成2进制数。3、选...

hpnynljy的博客 1785

【数据结构初阶】一文详解顺序栈和链队列的基本操作

【数据结构初阶】一文详解栈的基本操作和相关OJ题

每天都要坚持刷题的博客 1270
上一篇: 顺序栈和链栈的各种操作
eric802
博客等级 码龄17年 24粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值