当前位置:网站首页>栈和队列的基本概念
栈和队列的基本概念
2022-07-31 11:53:00 【马可爱家的马可爱】
1、栈和队列的基本认识
栈具有先进后出的特性;而队列具有先进先出的特性。所以从数据结构的角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,所以栈和队列其实是比较特殊的线性表,只允许在表的一端或者两端进行操作而已!
2、循环队列中判队空、队满条件
//----------------------循环队列的顺序存储结构------------------------
typedef struct{
QElemType *base; /* 初始化的动态分配存储空间 */
int front; //头指针,若队列不为空,指向队列头元素
int rear; //尾指针,若队列部位空,指向对尾的元素的下一个位置
}SeQueue;
//----------------------构造一个空队列Q———————————————————————————————
void InitQueue(SeQueue *Q){
//base指针用于申请指针并存放数据
Q->base= (QElemType*)malloc(MAXQSIZE*sizeof(QElemType));
if(!Q->base){
exit(OVERFLOW);
}
Q->front=Q->rear=0;//头指针和尾指针置为0,队列为空
return OK;
}
//---------------------队空-----------------------------------------
Q->front=Q->rear
//---------------------队满-----------------------------------------
(Q.real+1)%MAXSIZE == Q.front
对于非循环队列,尾指针和头指针的差值便是队列长度,而对于循环队列,差值可能是负值,所以需要将差值加上MAXSIZE,然后与MAXSIZE求余
//---------------------求一个循环队列的长度--------------------------
int QueueLength(SqQueue Q){
//返回Q中的元素个数,即队列的长度
return (Q.real-Q.front+MAXSIZE)%MAXSIZE;
}
//----------------------在对尾插入元素e,若为满队列时溢出--------------
Status EnQueue(SeQueue *Q, QElemType e){
if((Q.real+1)%MAXSIZE == Q.front) //判断是否队满
return ERROR;
Q->base[Q->rear] = e; //新元素插入队尾
Q->rear = (Q->rear + 1)%MAXSIZE; //队尾指针加1
return OK;
}
//----------------------删除队头元素,front+1------------------------
Status DeQueue(SeQueue *Q, QElemType *e){
if Q->front=Q->rear(){
return ERROR;
}
*e = Q->base[Q->front];
Q->front = (Q->front + 1)%MAXSIZE; //队尾指针加1
return OK;
}
边栏推荐
猜你喜欢

Acwing第 62 场周赛【未完结】

The latest MySql installation teaching, very detailed

Android studio连接MySQL并完成简单的登录注册功能

线程池 ThreadPoolExecutor 详解

ESP8266-Arduino编程实例-HDC1008温度湿度传感器驱动

Docker实践经验:Docker 上部署 mysql8 主从复制

AWS亚马逊云账号注册,免费申请12个月亚马逊云服务器详细教程

Cloudera Manager —— 端到端的企业数据中心管理工具
![[Virtualization ecological platform] Raspberry Pi installation virtualization platform operation process](/img/23/d4754ec38e50f320fc4ed90a1e5bbc.png)
[Virtualization ecological platform] Raspberry Pi installation virtualization platform operation process

JVS设置不同应用的登录时效时间
随机推荐
How MySQL's allowMultiQueries flag relates to JDBC and jOOQ
R语言做面板panelvar例子
Obsidian设置图床
JVS低代码能力简介及功能清单
音视频基础
Docker安装canal、mysql进行简单测试与实现redis和mysql缓存一致性
apisix-入门使用篇
If the value of the enum map does not exist, deserialization is not performed
JVS函数公式使用场景介绍
Initial JDBC programming
学自动化测试哪个培训机构好 试听课程后就选了这个地方学习
chroot命令
荣耀手机参数写错,客服认为没错
Standard SQL/JSON - the sobering part
CWE4.8 -- The 25 most damaging software security issues in 2022
deeplab实现自己遥感地质分割数据集
musl Reference Manual
MySql模糊查询大全
xmind使用指南(XMind具有下列哪些功能)
准确率(Accuracy)、精度(Precision)、召回率(Recall)和 mAP 的图解