队列小述
2015-08-29 09:33
309 查看
队列小述
队列的定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表,其是一种先进先出的线性表。与栈一样,队列也是一种重要的线性结构。队列也有顺序存储结构和链式存储结构。
队列中元素出列是在队头,入列在队尾。栈一般我们用顺序表来实现,而队列我们常用链表来实现,此时的队列简称为链队列。
队列的用链表实现的结构如下:
头指针指向链表的头结点,尾指针指向尾结点,其中头结点不是必需的,只是为了方便队列中的结点进行相应的操作而特意加上。
判断队列为空的条件是头指针和尾指针都同时指向头结点。
创建一个空队列(具有头结点)的代码如下:
给队列插入一个元素的代码如下:
那么出队列的操作如下:
链队列建立在内存的动态区,不用时应及时销毁。销毁一个队列的操作的代码:
队列的定义:队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表,其是一种先进先出的线性表。与栈一样,队列也是一种重要的线性结构。队列也有顺序存储结构和链式存储结构。
队列中元素出列是在队头,入列在队尾。栈一般我们用顺序表来实现,而队列我们常用链表来实现,此时的队列简称为链队列。
队列的用链表实现的结构如下:
typedef int ElemType; typedef struct QNode { ElemType data;// struct QNode *next;// }QNode,*QueuePrt; typedef struct { QueuePrt front,rear;//分别代表头指针和尾指针 }LinkQueue;
头指针指向链表的头结点,尾指针指向尾结点,其中头结点不是必需的,只是为了方便队列中的结点进行相应的操作而特意加上。
判断队列为空的条件是头指针和尾指针都同时指向头结点。
创建一个空队列(具有头结点)的代码如下:
int initQueue(LinkQueue *q) { q->front = q->rear = (QueuePrt)malloc(sizeof(QNode)); if(!(q->front))return -1; q->front->next = NULL; }
给队列插入一个元素的代码如下:
void InsertQueue(LinkQueue *q,ElemType e) { QueuePrt p; p = (QueuePrt)malloc(sizeof(QNode)); if(p==NULL)exit(0); p->data = e; p->next = NULL; q->rear->next = p; q->rear = p; }
那么出队列的操作如下:
int DeleteQueue(LinkQueue *q,ElemType *e) { QueuePrt p; if(q->front == q->rear)return -1; p = q->front->next; *e = p->data; q->front->next = p->next; if(p==q->rear) { q->rear = q->front; } free(p); }
链队列建立在内存的动态区,不用时应及时销毁。销毁一个队列的操作的代码:
void DestoryQueue(LinkQueue *q) { QueuePrt p; while(q->front) { p = q->front->next; free(q->front); q->front = p; } }
相关文章推荐
- SpringMVC详解(一)简介
- Spring MVC详解(二)Spring Web MVC是什么
- Spring MVC详解(三)DispatcherServlet作用
- 操作注册表
- java 死锁产生原因及解锁
- iOS 开发常见的错误提示信息
- Spring MVC详解(四) Controller接口控制器详解(1)
- Spring MVC详解(四)接口控制器详解(2)
- Spring MVC详解(四)Controller接口控制器详解(3)
- Spring MVC详解(四)Controller接口控制器详解 (4)
- Vmware-桥接模式连接网络
- MySQL索引背后的数据结构及算法原理
- 动态规划之背包问题(一)
- Spring MVC详解(四)Controller接口控制器详解(5)
- Spring MVC详解(四)Controller接口控制器详解(6)
- Spring MVC详解(四) Controller接口控制器详解(7 )完
- Spring MVC详解(五) 处理器拦截器详解
- 分支11 —— 分支17、分支19、分支20
- 单链表(c++带头结点,)
- 每天5道面试题(六)java基础