3.9 队列的链式表示和实现
3.5.3 队列的链式表示和实现
适用于用户无法估计所用队列的长度,则适宜采用该类型的队列
-
链式队列的结构图如下所示
-
链队列的类型定义
// 这里是定义是每个节点类型 typedef struct Qnode{ QElemType data; struct Qnode *next; }QNode,*QueuePtr; typedef struct{ QuenePtr front; // 队头指针 QuenePtr rear; // 队尾指针 }LinkQueue;
-
链队列运算指针变化
- 空队列情况是:Q.front==Q.rear
- 元素x入队列:Q.rear=x
- y入队列:Q.rear=y;
链队列初始化
-
【算法描述】
Status InitQueue(LinkQueue &Q){ Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) exit(OVERFLOW); Q.front->next=NULL; return OK; }
销毁队列
-
【算法思想】从队头结点开始,依次释放所有结点
-
【算法描述】
Status DestroyQueue(LinkeQueue &Q){ QNode p; while(Q.front){ p=Q.front->next; free(Q.front); Q.front=p; } return OK; }
将元素e入队
-
【算法思想】在队尾插入新元素
-
【算法描述】
Status EnQueue(LinkQueue &Q,ElemType e){ //QNode p=new QNode(); QNode p=(QueuePtr)malloc(sizeof(QNode)); p->data=e; p->next=NULL; Q.rear->next=p; Q.rear=p; return OK; }
链队列出队
-
【算法思想】在队头进行删除元素
-
【算法描述】
Status DeQueue(LinkQueue &Q,ElemType &e){ // 首先是判断队列是否为空 if(Q.front==Q.rear) return ERROR; QNode p=Q.front->next; Q.front=p->next; free(p); return OK; }
求链队列的队头元素
-
【算法思想】查询队头元素的值
-
【算法描述】
Status GetHead(LinkQueue Q,QElemType &e){ if(Q.front==Q.rear)// 判断队列是否为空 return ERROR; e=Q.front->next->data; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话