当前位置:网站首页>栈和队列的基本概念
栈和队列的基本概念
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;
}
边栏推荐
- imx6ull看门狗使用
- 连续变量离散化教程
- 初识QEMU
- ESP8266-Arduino编程实例-HDC1008温度湿度传感器驱动
- Docker practical experience: Deploy mysql8 master-slave replication on Docker
- kubernetes之服务发现
- pycharm汉化教程(碧蓝幻想汉化插件安装)
- 生信周刊第38期
- 科学论文和学术论文写作
- Summary of several defragmentation schemes for MySQL (to solve the problem of not releasing space after deleting a large amount of data)
猜你喜欢
随机推荐
线程池 ThreadPoolExecutor 详解
生信周刊第38期
ApiPost is really fragrant and powerful, it's time to throw away Postman and Swagger
安装MYSQL遇到问题:write configuration file卡主
VBA实现双击单元格自动输出对号再次双击取消对号
In PLC communication error or timeout or download the prompt solution of the model
oracle优化:instr做join条件很慢「建议收藏」
MySQL row-level locks (row locks, adjacent key locks, gap locks)
Docker installs canal and mysql for simple testing and achieves cache consistency between redis and mysql
初始JDBC 编程
A40i/T3 uboot启动时对PMU部分初始化
蓝牙协议栈开发板 STM32F1 跑蓝牙协议栈 –传统蓝牙搜索演示以及实现原理[通俗易懂]
普林斯顿微积分读本03第二章--编程实现函数图像绘制、三角学回顾
Candence学习篇(11) allegro中设置规则,布局,走线,铺铜
矩形脉冲波形的占空比及脉冲和瞬态特征的测量
lotus-local-net 2k v1.17.0-rc4
荣耀手机参数写错,客服认为没错
MySQL百万数据优化总结 一
After Effects 教程,如何在 After Effects 中修复曝光不足的镜头?
SAP Commerce Cloud Product Review 的添加逻辑