当前位置:网站首页>栈和队列的基本概念
栈和队列的基本概念
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;
}
边栏推荐
猜你喜欢
随机推荐
MySQL模糊查询性能优化
cesium-Web网页优化进阶
MySQL百万数据优化总结 一
Different lower_case_table_names settings for server ('1') and data dictionary ('0') solution
【虚拟化生态平台】树莓派安装虚拟化平台操作流程
MySQL limit paging query and performance issues
使用 Excel 读取 SAP ABAP CDS View 通过 ODBC 暴露出来的数据
科学论文和学术论文写作
分布式事务Seata详细使用教程
想吃菌子,当然是自己上山找了
瑞吉外卖项目:新增菜品与菜品分页查询
deeplab实现自己遥感地质分割数据集
JVS低代码能力简介及功能清单
Docker实践经验:Docker 上部署 mysql8 主从复制
mysql根据多字段分组——group by带两个或多个参数
Cloudera Manager —— 端到端的企业数据中心管理工具
音视频基础
R语言:文本(字符串)处理与正则表达式
How MySQL's allowMultiQueries flag relates to JDBC and jOOQ
The item 'node.exe' was not recognized as the name of a cmdlet, function, script file, or runnable program.






