网站首页 > 技术文章 正文
1.队列的链式存储结构
用链式存储结构存储的队列称为链队列,它是一个仅在表头删除结点和在表尾插入结点的单链表。因此,在链队列中需要使用两个指针:头指针front和尾指针rear。用front指向链队列的队头,用rear指向链队列的队尾。如图3-8所示。
为操作方便,在链队列中添加一个头结点,该结点不存储任何元素,并让头指针指向头结点。可见空的链队列的判定条件是头指针和尾指针均指向头结点。
链队列的类型LinkQueue可定义如下:
struct node { /*链队列的结点类型*/
ElemType data ; /*链队列结点的数据域*/
struct node *next; /*链队列结点的指针域*/
};
struct node *front,*rear; /*front和rear分别为链队列的头指针和尾指针*/
2.链队列的基本操作
假设在链队列中,front、rear均为node类型的全局变量。
(1)链队列的初始化
算法步骤:
1.首先产生一个头结点,将其后继指针设置为空;
2.将队头和队尾指针均指向该结点。
链队列的初始化算法
void InitQueue() /*初始化链队列*/
{
struct node *p=malloc(sizeof(struct node));/*生成新结点p*/
p->next=NULL; /*使新结点的指针域为空*/
front=rear=p; /*队头和队尾指针均指向新结点*/
}
(2)判队空
判断队列是否为空,也就是判断队头、队尾指针是否相等。
链队列判队空算法
int QueueEmpty()
{
if(front==rear) return 1; /* 如果链队列为空,则返回1 */
else return 0; /* 否则返回0 */
}
(3)入队
算法要点:
1.生成一个新结点p,给新结点的数据域和指针域分别赋值;
2.使新结点成为新的队尾结点;
3.修改队尾指针rear,使rear指向新的队尾结点。
链队列入队算法
void InQueue(ElemType x)
{
struct node *p;
p=malloc(sizeof(struct node)); /*生成新结点p*/
p->data=x; /*给新结点的数据域赋值*/
p->next=NULL; /*给新结点的指针域赋值*/
rear->next=p; /*新结点成为新的队尾结点*/
rear=p; /*让队尾指针指向新的队尾结点*/
}
(4)出队
算法要点:
1.首先检查链队列是否为空,若为空队列,则进行“下溢出”错误处理;
2.保存队头结点的值;
3.修改队头指针,使其指向队列的第二个结点,建立新的链接队列;
4.删除原队头结点;
5.返回原队头结点的信息。
链队列出队算法
ElemType OutQueue()
{
int x;
if(front==rear){ /*检查链队列是否为空*/
printf("队列下溢错误!\n");
exit(1); /*若队空不能出队,则退出运行*/
}
else {
struct node *p=front->next; /*用指针变量p指向队列的第一个结点*/
x=p ->data; /*用x暂存第一个结点数据域*/
front->next=p->next; /*修改队头指针,指向下一个结点*/
if(p->next==NULL) rear=front; /*若队列已空则修改队尾指针*/
free(p); /*回收原队头结点*/
return x; /*返回原队头元素的值*/
}
}
猜你喜欢
- 2024-10-04 nodejs配置和环境的搭建(nodejs 配置)
- 2024-10-04 广州蓝景分享—Webpack 基础教学,正在自学前端的你赶快收藏起来
- 2024-10-04 五分钟了解 Node.js Shebang(五分钟了解中国历史)
- 2024-10-04 怎么解决koa写server发布的噩梦(koa server)
- 2024-10-04 Node直出方案的实现及性能测试(node技术)
- 2024-10-04 webpack5入门到实战(5-处理 js 资源)
- 2024-10-04 Node-red Function&注入功能介绍
- 2024-10-04 Linux实战017:Ubuntu搭建NodeJS开发环境
- 2024-10-04 手把手告诉你如何安装多个版本的node
- 2024-10-04 Node编程基本语法(nodejs基础语法)
- 11-23微信如何群发消息给所有人(微信如何群发消息给所有人全选)
- 11-23腾达路由器手机登录(腾达路由器官网页登录)
- 11-23防火墙关闭对电脑有影响吗(防火墙关闭有什么影响)
- 11-23联想笔记本电脑官网查询真伪入口
- 11-23申请恢复qq群(申请恢复qq群聊怎么恢复)
- 11-23苹果查询激活日期和保修期限
- 11-23u盘提示格式化但无法格式化(u盘提示格式化却无法格式化)
- 11-22pe启动盘怎么装系统(pe启动盘如何重装系统win10)
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (76)
- js判断是否是json字符串 (75)
- c语言min函数头文件 (77)
- asynccallback (87)
- localstorage.removeitem (77)
- vector线程安全吗 (73)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 无效的列索引 (74)
