线性表--队列
和栈相反,队列是一种先进先出(first in first out 缩写为FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。
双端队列:限定插入和删除操作在表的两端进行的线性表
-----单链队列 队列的链式存储表示------
和线性表类似,队列也可以有两种存储表示。用链表表示的队列简称链队列。
typedef struct QNode {
QElemType data;
struct QNode * next;
}QNode ,QueuePtr;
typedef struct {
Queueptr front; //队头指针
Queueptr rear; //队尾指针
}LinkQueue;
status InitQueue(LinkQueue & q)
{ //构造一个带头结点的空队列
q.front = q.rear = (Queueptr) malloc ( sizeof(QNode));
if(!q.front) exit;
q.front->next = NULL;
return ok;
}
status DestroyQueue(LinkQueue & q)
{
while(q.front)
{
q.rear= q.front->next;
free(q.front);
q.front = q.rear;
}
return ok;
}
status EnQueue(LinkQueue & q, QElemType e)
{
p = (Queueptr) malloc(sizeof(QNode));
if(!p) exit;
p->data = e; p->next = NULL;
q->rear ->next = p;
q->rear = p;
return ok;
}
status DeQueue(LinkQueue & q,QElemType &e)
{
if(q.front == q.rear) return ERROR;
p = q.front->next;
e = q.data;
q.front ->next =p->next;
if(q.rear == p) q.rear= q.front;
free(p);
return ok;
}
-----循环队列 队列的顺序存储表示------
status InitQueue(SqSqueue & q) {
q.base = (QElemType*)malloc(MAXQSIZE * sizeof(QElemType));
if(!q.base) exit;
q.front = q.rear = 0;
return ok;
}
int QueueLength(SqSqueue & q) {
return (q.rear-q.front+MAXQSIZE)%MAXQSIZE;
}
status EnQueue(SqSqueue & q,QElemType e) {
if((q.rear+1)%MAXQSIZE == q.front) return ERROR;
q.base[q.rear] = e;
q.rear = (q.rear+1)%MAXQSIZE;
return ok;
}
status DeQueue(SqSqueue & q,QElemType &e) {
if(q.front == q.rear) return ERROR;
e = q.base[q.front];
q.front = (q.front+1) % MAXQSIZE;
return ok;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2012-06-11 file operation
2012-06-11 选择目录对话框和选择文件对话框