数据结构初学之队列--用不带头结点的单链表实现链队列
2020-07-14 04:50
50 查看
前言:用不带头结点的单链表来实现链队列要比带头结点的单链表实现复杂一点,主要在初始化队列,入队时有一些区别。特别是在入队时,要根据入队的是不是第一个元素来进行讨论。
1、初始化队列,使队头指针front和队尾指针rear指向空
2、判断队空,Q.front == NULL时为空,不能用Q.front == Q.rear来判断,否则在入队操作时, 会导致Q.front == Q.rear这个条件始终成立,即队头指针和队尾指针始终同时指向新结点。
3、出队时要先判断是否队空,队空则不能出队。当链队列只有一个元素时,出对后,要将Q.rear手动指向空,否则会成为野指针(void point)。
typedef int elementType; typedef struct LNode { elementType data; struct LNode* next; }node; //链队列结构描述 typedef struct { node* front; node* rear; }linkQueue; //链队列初始化 //不带头结点 void initQueue(linkQueue& Q) { Q.front = NULL;//不带头结点时指向空 Q.rear = Q.front; } //判断队空 bool queueEmpty(linkQueue& Q) { return (Q.front == NULL); //注意不能用Q.front == Q.rear来判断 } //取队头元素 void queueFront(linkQueue& Q, elementType& x) { if (queueEmpty(Q)) cout << "队列为空,无法取队头元素!"; else { x = Q.front->data; } } //入队 void enQueue(linkQueue& Q, elementType x) { node* s = new node; s->data = x; s->next = NULL; //判断入队的是否是第一个元素 if (queueEmpty(Q)) { Q.front = s; Q.rear = s; } else { Q.rear->next = s; Q.rear = s; } } //出队 void outQueue(linkQueue& Q, elementType& x) { node* s; if (queueEmpty(Q)) { cout << "当前队空,无法执行出队操作!" <<endl; } else { s = Q.front; Q.front = s->next; x = s->data; delete s; if (Q.front == NULL)//防止野指针void point Q.rear = Q.front; } } //打印链队列 void printQueue(linkQueue& Q) { node* p = Q.front; cout << "打印链队列" << endl; while (p) { cout << p->data << " "; p = p->next; } cout << endl; } //求队列中的元素个数 int queueLen(linkQueue& Q) { node* p = Q.front; int cnt = 0; while (p) { cnt++; p = p->next; } return cnt; }
相关文章推荐
- 数据结构 带头结点的单链表 操作大全 最全的链表操作(c++实现)
- 写给初学者的数据结构——初识链表(带头结点)(C++实现)
- 数据结构(四)——单链表 、带头结点的单链表、循环链表 及其实现
- 写给初学者的数据结构——初识链表(带头结点)(标准C实现)
- 数据结构 P38 算法实现 在带头结点的单链表的第i个元素插入元素e
- 经典算法与数据结构的c++实现——带头结点的单链表
- 使用不带头结点的循环链表实现队列(数据结构)
- 数据结构(二)——单链表 、带头结点的单链表、循环链表 及其实现
- 数据结构-java与c实现带头结点的单链表
- 数据结构(四)——单链表 、带头结点的单链表、循环链表 及其实现
- 数据结构模版----单链表SimpleLinkList[不带头结点&&伪OO](C语言实现)
- 使用不带头结点的循环链表实现队列(数据结构)
- 用C++实现数据结构二 带头结点的单链表
- 计算带头结点单链表的长度 计算单链表的长度,实现单链表的打印
- 线性表——带头结点单链表的实现
- 用单链表与数组实现队列先进先出的数据结构
- Lua中使用table实现的其它5种数据结构(数组、链表、队列、集合和包、StringBuild)
- 【数据结构】用模板类链表实现队列
- 【数据结构】队列-链表的实现
- 数据结构-队列-链表实现