队列——链队列
来源:互联网 发布:如何查看tcp端口 编辑:程序博客网 时间:2024/06/05 16:07
在队列的形成过程中,可以利用线性链表的原理,来生成一个队列。基于链表的队列,要动态创建和删除节点,效率较低,但是可以动态增长。队列采用的FIFO(first in first out),新元素(等待进入队列的元素)总是被插入到链表的尾部,而读取的时候总是从链表的头部开始读取。每次读取一个元素,释放一个元素。所谓的动态创建,动态释放。因而也不存在溢出等问题。由于链表由结构体间接而成,遍历也方便。
本文主要讲的是链队列相关操作,
首先是创建链队列:
Queue * q = (Queue*)malloc(sizeof(Queue)/sizeof(char));q->front = NULL;q->rear = NULL;return q;
为队列分配一块内存,并将队头队尾都指向NULL,即置空队列,一个队列就建好了。
判断队列是否空:
return q->front == NULL;
链队列不存在队满问题,而判断队空也比较简单,只要队头元素不为空就不为空了。
进队:
Node * node = (Node*)malloc(sizeof(Node)/sizeof(char)); node->data = x; node->next = NULL; if (q->front == NULL) { q->front = node; q->rear = node; } else { q->rear->next = node; q->rear = node; }
新建一个节点,初始化后将队尾指针指向新建结点,新建节点则成为了队尾指针。这样就完成了入队的过程。当然之前要判断队是否为空,若为空的话,队头队尾都指向新建结点。
出队:
Node *p = q->front; *x = p->data; q->front = p->next; free(p);
出队过程也很简单,用一个p保存队头元素,用一个x取出队头数值,然后将队头指针指向原先队头元素的下一个元素。当然之前要判断对是否为空,为空的话则置队尾也为NULL。
获取队头元素:
*x = q->front->data;
获取队头元素也比较简单,问题不大。
关于链队列的操作还有一些,比如遍历队列元素等,在这里就不多说了。
阅读全文
0 0
- 队列 —— 链队列
- 队列——链队列
- 队列——顺序队列
- 队列-循环队列/链队列
- 队列,链队列,循环队列
- 队列,链队列,循环队列
- 队列第二篇————链队列
- 链队列——队列的链式表示与实现
- 链队列——队列的链式表示和实现
- 单链队列——队列的链式存储结构
- 实验3.4 栈与队列——链队列
- 数据结构——链队列
- 数据结构——链队列
- 数据结构——栈与队列(顺序栈、链栈、循环队列、链队列)
- 数据结构——队列之顺序队列
- 数据结构——队列及循环队列
- 队列--链表队列
- 队列之链队列
- u-boot执行顺序start_armboot
- 一个“.java”文件中是否允许多个类(不是内部类)存在
- html,css,js防止浏览器缓存,导致不加载新页面。
- FreeRTOS系列学习笔记一---FreeRTOS编码标准及风格指南
- hive使用serde是出现classnotfind的问题
- 队列——链队列
- 一行代码调用Android自定义ViewPager指示器
- Struts2框架下使用Kindeditor上传图片
- 批处理汇总
- Android系统解决方法数越界
- Sublime配置lua开发环境傻瓜式教学
- 函数式编程
- 链表创建及反转
- json