数据结构之队列(二)——链队列
2016-04-11 18:07
429 查看
链队列采用带头结点的链表,队头指针始终指向头结点,队尾指针始终指向最后一个元素
当队列为空时:队头指针和队尾指针均指向头结点
链队列不会满!!!
链队列的定义:
1.定义一种结点结构体:指针域指向下一个结点,数据域存储数据
2.定义链队列结构体:分别存储两个结点指针,队头指针和队尾指针
链队列的初始化
队头指针和队尾指针相等且均为空
入队:
记得队尾的元素的next域为空
出对
1.删除操作之间要判断是否为空
2.要根据删除操作之后是否为空来决定队尾指针是否等于队头指针
可以这样理解:1.判断是否为空
2.使p=front-》next
3.赋值给x
4.使p出对:
5.判断p出对之后是否为空
若为空:队尾指针等于队头指针
若不为空:不做处理
6.释放p
当队列为空时:队头指针和队尾指针均指向头结点
链队列不会满!!!
链队列的定义:
1.定义一种结点结构体:指针域指向下一个结点,数据域存储数据
2.定义链队列结构体:分别存储两个结点指针,队头指针和队尾指针
typedef char DataType; typedef struct Node{ DataType data; struct Node* next; }LinkQueueNode; typedef struct Queue{ LinkQueueNode *front; LinkQueueNode *rear; }LinkQueue;
链队列的初始化
队头指针和队尾指针相等且均为空
bool InitQueue(LinkQueue* Q) { Q->front=(LinkQueueNode*)malloc(sizeof(LinkQueueNode)); if(Q->front!=NULL) { Q->front->next=NULL; Q->rear=Q->front; return true; } else { return false; } }
入队:
记得队尾的元素的next域为空
bool EnterQueue(LinkQueue* Q,DataType x) { LinkQueueNode *p; p=(LinkQueueNode*)malloc(sizeof(LinkQueueNode)); if(p!=NULL) { p->data=x; Q->rear->next=p; p->next=NULL;//注意要赋空 Q->rear=p; return true; } else return false; }
出对
1.删除操作之间要判断是否为空
2.要根据删除操作之后是否为空来决定队尾指针是否等于队头指针
bool DelteQueue(LinkQueue* Q,DataType* x) { LinkQueueNode* p; //记住:删除操作之前要记得判断是否为空 if(Q->front==Q->rear) return false; else { p=Q->front->next; *x=p->data; Q->front->next=p->next; if(p==Q->rear) Q->rear=Q->front; free(p); return true; } }
可以这样理解:1.判断是否为空
2.使p=front-》next
3.赋值给x
4.使p出对:
Q->front->next=p->next;
5.判断p出对之后是否为空
若为空:队尾指针等于队头指针
若不为空:不做处理
6.释放p
相关文章推荐
- 数据结构-线性表的链式结构
- 数据结构之队列(一)——概览
- Java数据结构——二叉树
- 数据结构(java语言描述)树(二叉树)的构建和遍历操作
- 数据结构之线性表
- 数据结构 - Trie树(字典树)
- B树、B-树、B+树、B*树总结
- YTUOJ之最快合并链表(线性表)
- 浅谈算法和数据结构: 六 符号表及其基本实现
- 数据结构(线段树):HDU 5649 DZY Loves Sorting
- YTUOJ之删除相同元素(线性表)
- YTUOJ之合并链表(线性表)
- 【数据结构与算法】哈希表
- 数据结构各排序算法综述
- 数据结构中常见的树(BST二叉搜索树、AVL平衡二叉树、RBT红黑树、B-树、B+树、B*树)
- 数据结构应用:利用栈破解迷宫游戏
- 数据结构(主席树):HDU 5654 xiaoxin and his watermelon candy
- MySQL索引背后的数据结构及算法原理
- 数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)
- 走迷宫问题(待续)