c语言数据结构学习心得——队列
2024-09-04 14:22:14
队列
只允许在一端进行插入,在另一端进行删除的线性表
队头(Front):允许删除的一端(队首)
队尾(Rear):允许插入的一端
FIFO:先进先出
不要求从数组首位开始存储队列
#define MaxSize 50 //定义队列中元素的最大个数
typedef struct{
ElemType data[MaxSize]; //存放队列元素
int front,rear; //队头指针和队尾指针
}SqQueue;
循环队列
其中,首尾相连的顺序存储的队列叫循环队列
入队:rear=(rear+1)%MaxSize
出队:front=(front+1)%MaxSize
队空:front=rear
队满:数组中仍有一个空余单元
队满时:(rear-front+MaxSize)%MaxSize
1.入队
bool EnQueue(SqQueue &Q,ElemType x){
if((Q.rear+)%MaxSize==Q.front) return false;//队满
Q.data[Q.rear]=x;
Q.rear=(Q.rear+)%MaxSize;
return true;
}
2.出队
bool DeQueue(SqQueue &Q,ElemType &x){
if(Q.rear==Q.front) return false;//队满
x=Q.data[Q.front];
Q.rear=(Q.front+)%MaxSize;
return true;
}
链式队列
typedef struct{ //链式队列结点
ElemType data;
struct Link Node *next;
}Link Node;
typedef struct{ //链式队列
ElemType data;
Link Node *front,*rear;//队头和队尾指针
}Link Queue;
1.入队
void EnQueue(LinkQueue &Q,ElemType x){
s=(LinkNode *)malloc(sizeof(LinkNode));
s->data=x;
s->next=NULL;
Q.rear->next=s;
Q.rear=s;
}
2.出队
bool DeQueue(LinkQueue &Q,ElemType &x){
if(Q.front==Q.rear) return false; //空队
p=Q.front->next;
x=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front; //原队列只有一个结点删后变空队
free(p);
return true;
}
双端队列
具体见上传图片
总结
最新文章
- POST在发送数据的时候使用的是HTTP命令
- Oracle EBS 初始化用户密码(转)
- 什么是xmlschema
- java基础介绍(转)
- MVC学习笔记---MVC的处理管线
- jquery优化02
- chrome的input默认样式黄色背景以及选中加粗的边框处理
- Java-note-输入流
- Java学习备忘录
- 时间紧迫,写一些 NavigationController 一次性返回2级界面甚至更多级的界面
- python正则表达式入门
- 【行为型】Interpreter模式
- 项目实战5—企业级缓存系统varnish应用与实战
- Mac上安装Charles进行抓包全流程设置
- Tomcat监听443端口的方法
- I.MX6 Manufacturing Tool V2 (MFGTool2) Emmc mksdcard.sh hacking
- C# 设计模式-工厂模式(Factory)
- python中readline判断文件读取结束的方法
- linux shell实现随机数多种方法(date,random,uuid)
- SQL Server: Top 10 Secrets of a SQL Server Expert
热门文章
- leetcode486
- python之operator模块
- RequestParam注解的Url参数被省略时该如何处理
- 【原创】基于UDP广播的局域网Web Window Service日志跟踪小工具
- SPQuery DateTime 类型查询
- Elasticsearch聚合限制内存使用
- spring aop自动代理注解配置之一
- 面试题:Java开发中的23种设计模式详解(转)
- lnmp+laravel部署到服务器出现 ";GET / HTTP/1.1"; 500 5
- PHP中 null ,false , 区别