数据结构之队列(链式队列)
2014-03-14 08:47
399 查看
# include <stdio.h> # include <stdlib.h> typedef struct Node { int val; struct Node * pNext; }NODE, * PNODE; typedef struct Queue { PNODE front; PNODE rear; }QUEUE,* PQUEUE; void init(PQUEUE); void in(PQUEUE,int); bool out(PQUEUE,int *); bool empty(PQUEUE); void traverse(PQUEUE); int main() { QUEUE q; int val; init(&q); in(&q,1); in(&q,2); in(&q,3); in(&q,4); in(&q,5); in(&q,6); in(&q,7); in(&q,8); in(&q,9); traverse(&q); if (out(&q,&val)) { printf("出队的数据为:%d\n",val); } if (out(&q,&val)) { printf("出队的数据为:%d\n",val); } if (out(&q,&val)) { printf("出队的数据为:%d\n",val); } if (out(&q,&val)) { printf("出队的数据为:%d\n",val); } if (out(&q,&val)) { printf("出队的数据为:%d\n",val); } traverse(&q); return 0; } void init(PQUEUE pQ) { pQ->front=(PNODE)malloc(sizeof(NODE)); pQ->front->pNext=NULL; pQ->rear=pQ->front; } void in(PQUEUE pQ,int val) { PNODE pNew=(PNODE)malloc(sizeof(NODE)); pNew->pNext=pQ->rear; pQ->rear->val=val; pQ->rear=pNew; } void traverse(PQUEUE pQ) { PNODE p=pQ->rear->pNext; while(NULL!=p) { printf("%d ",p->val); p=p->pNext; } printf("\n"); } bool empty(PQUEUE pQ) { if (pQ->rear==pQ->front) return true; return false; } bool out(PQUEUE pQ,int * pVal) { PNODE p=pQ->rear; if (empty(pQ)) return false; else { while(p!=pQ->front) { if (p->pNext==pQ->front) //找到指向最后那个结点的地址,也就是从前面(front)数第二个元素 break; p=p->pNext; } *pVal=p->pNext->val; p->pNext=NULL; pQ->front=p; free(p->pNext); return true; } }
相关文章推荐
- C++数据结构之链式队列(Linked Queue)
- 数据结构之线性表——队列的链式存储
- 数据结构之C/C++实现链式队列
- 数据结构之链式队列的所有操作
- 数据结构基础(14) --链式队列的设计与实现
- 数据结构之队列(顺序队列和链式队列)
- 数据结构教程(第四版)P85~87//队列的链式存储结构
- 数据结构——链式队列模板类实现
- 数据结构基础(14) --链式队列的设计与实现
- 数据结构基础(14) --链式队列的设计与实现
- 【数据结构与算法】基本数据结构——队列的链式表示
- 数据结构之链式队列与链式栈
- 数据结构基础-队列(循环队列、链式队列)以及STL中queue的使用
- 再回首,数据结构——链式队列上的常见操作
- 数据结构单链队列——链式存储实现
- 数据结构之顺序队列和链式队列常用的一些操作
- 数据结构——链式队列
- 数据结构(五)——双链表、链式栈、链式队列 及实现
- 数据结构(六)---队列的链式存储的实现---java版
- 【数据结构】——链式队列操作