队列——链表实现
2017-05-14 12:22
267 查看
引言:
队列与栈的差别是队列是先进先出的数据结构。
为了使得出入队列easy。能够引入队列头指针和队列尾指针。
分析描写叙述:
队列的结点结构。
typedef int QElemType; typedef struct QNode{ QElemType data; struct QNode *next; }QNode, *QueuePtr; typedef struct{ QueuePtr front;//队列的头指针 QueuePtr rear;//队列的尾指针 }LinkQueue; LinkQueue Q;
队列的初始化。
LinkQueue InitQueue(LinkQueue *Q) { QueuePtr tmp; tmp = (QueuePtr)malloc(sizeof(QNode)); if(tmp == NULL){ printf("create queue error.\n"); return ; } Q->front = tmp; Q->rear = Q->front; Q->front->next = NULL; return *Q; }
入队列操作。
void EnQueue(LinkQueue *Q, QElemType e) { QueuePtr tmp; tmp = (QueuePtr)malloc(sizeof(QNode)); if(tmp == NULL){ printf("create queue error.\n"); return ; } tmp->data = e; tmp->next = NULL; Q->rear->next = tmp; Q->rear = tmp; return; }
出队列操作。
void DeQueue(LinkQueue *Q, QElemType *e) { QueuePtr tmp; if(Q->front == Q->rear){ printf("the queue is empty.\n"); return ; } tmp = Q->front->next; *e = tmp->data; Q->front->next = tmp->next; if(Q->rear == tmp) Q->rear = Q->front; free(tmp); return; }
取队列的头元素。
void GetHead(LinkQueue *Q, QElemType *e) { if(Q->front == Q->rear) return; *e = Q->front->next->data; return ; }
推断队列是否为空。
int QueueEmpty(LinkQueue *Q) { if(Q->front == Q->rear) return TRUE; return FALSE; }
清空队列。
void ClearQueue(LinkQueue *Q) { if(Q->front == Q->rear){ printf("the queue is empty.\n"); return; } while(Q->front->next){ Q->rear = Q->front->next->next; free(Q->front->next); Q->front = Q->front->next; } Q->front->next = NULL; Q->rear = Q->front; return; }
求队列的长度。
int QueueLength(LinkQueue Q) { int length = 0; LinkQueue Tmp= Q。 while(Tmp.front != Tmp.rear){ length++; Tmp.front = Tmp.front->next; } return length - 1; }
相关文章推荐
- 用链表实现优先级队列
- 一个单向链表,并实现栈和队列
- 循环队列模版(链表实现)
- java数据结构之LinkedQueue(用链表实现的双端单向队列)
- C++ 实现queue(队列)链表
- 链表实现的队列
- java数据结构之LinkedDeque(用链表实现的双端(即头尾两个哨兵节点)双向(node里两个指向)队列)
- 用链表实现队列数据结构
- c++链表实现队列
- 队列的实现--链表实现
- 用链表实现的队列
- 队列的链表实现!
- 堆栈与链表与队列代码实现
- 队列_链表实现
- 队列(链表实现)
- 队列::链表结构实现
- 利用链表实现队列的Java代码
- 队列的链表与数组实现
- 数据结构_队列_用链表动态建立释放节点实现队列各种操作_C++实现
- java用链表实现堆栈和队列