队列
来源:互联网 发布:碧欧泉的奇迹水 知乎 编辑:程序博客网 时间:2024/05/16 06:19
队列也是常用的数据结构之一,下面给出一个链式队列的实现~~
#ifndef Queue_H#define Queue_Htypedef int Item;typedef struct node * PNode;typedef struct node{ Item data; PNode next;}Node;typedef struct{ PNode front; PNode rear; int size;}Queue;/*构造一个空队列*/Queue *InitQueue();/*销毁一个队列*/void DestroyQueue(Queue *pqueue);/*清空一个队列*/void ClearQueue(Queue *pqueue);/*判断队列是否为空*/int IsEmpty(Queue *pqueue);/*返回队列大小*/int GetSize(Queue *pqueue);/*返回队头元素*/PNode GetFront(Queue *pqueue,Item *pitem);/*返回队尾元素*/PNode GetRear(Queue *pqueue,Item *pitem);/*将新元素入队*/PNode EnQueue(Queue *pqueue,Item item);/*队头元素出队*/PNode DeQueue(Queue *pqueue,Item *pitem);/*遍历队列并对各数据项调用visit函数*/void QueueTraverse(Queue *pqueue,void (*visit)());#endif#include"Queue.h"#include<malloc.h>#include<stdio.h>/*构造一个空队列*/Queue *InitQueue(){ Queue *pqueue = (Queue *)malloc(sizeof(Queue)); if(pqueue!=NULL) { pqueue->front = NULL; pqueue->rear = NULL; pqueue->size = 0; } return pqueue;}/*销毁一个队列*/void DestroyQueue(Queue *pqueue){ if(IsEmpty(pqueue)!=1) ClearQueue(pqueue); free(pqueue);}/*清空一个队列*/void ClearQueue(Queue *pqueue){ while(IsEmpty(pqueue)!=1) { DeQueue(pqueue,NULL); }}/*判断队列是否为空*/int IsEmpty(Queue *pqueue){ if(pqueue->front==NULL&&pqueue->rear==NULL&&pqueue->size==0) return 1; else return 0;}/*返回队列大小*/int GetSize(Queue *pqueue){ return pqueue->size;}/*返回队头元素*/PNode GetFront(Queue *pqueue,Item *pitem){ if(IsEmpty(pqueue)!=1&&pitem!=NULL) { *pitem = pqueue->front->data; } return pqueue->front;}/*返回队尾元素*/PNode GetRear(Queue *pqueue,Item *pitem){ if(IsEmpty(pqueue)!=1&&pitem!=NULL) { *pitem = pqueue->rear->data; } return pqueue->rear;}/*将新元素入队*/PNode EnQueue(Queue *pqueue,Item item){ PNode pnode = (PNode)malloc(sizeof(Node)); if(pnode != NULL) { pnode->data = item; pnode->next = NULL; if(IsEmpty(pqueue)) { pqueue->front = pnode; } else { pqueue->rear->next = pnode; } pqueue->rear = pnode; pqueue->size++; } return pnode;}/*队头元素出队*/PNode DeQueue(Queue *pqueue,Item *pitem){ PNode pnode = pqueue->front; if(IsEmpty(pqueue)!=1&&pnode!=NULL) { if(pitem!=NULL) *pitem = pnode->data; pqueue->size--; pqueue->front = pnode->next; free(pnode); if(pqueue->size==0) pqueue->rear = NULL; } return pqueue->front;}/*遍历队列并对各数据项调用visit函数*/void QueueTraverse(Queue *pqueue,void (*visit)()){ PNode pnode = pqueue->front; int i = pqueue->size; while(i--) { visit(pnode->data); pnode = pnode->next; }}#include"Queue.h"#include<stdio.h>void print(Item i){ printf("该节点元素为%d\n",i);}main(){ Queue *pq = InitQueue(); int i,item; printf("0-9依次入队并输出如下:\n"); for(i=0;i<10;i++) { EnQueue(pq,i); GetRear(pq,&item); printf("%d ",item); } printf("\n从队头到队尾遍历并对每个元素执行print函数:\n"); QueueTraverse(pq,print); printf("队列中元素依次出队列并输出如下:\n"); for(i=0;i<10;i++) { DeQueue(pq,&item); printf("%d ",item); } ClearQueue(pq); if(IsEmpty(pq)) printf("\n将队列置空成功\n"); DestroyQueue(pq); printf("队列已被销毁\n");}
0 0
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- 队列
- Android Fragment 生命周
- android 读取 AndroidManifest.xml 中的数据:版本号、应用名称、自定义K-V数据(meta-data)
- Android中多线程处理
- 改变与适应
- HDOJ Pupu 3003【快速幂】
- 队列
- HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
- python用于测试的failIf,failUnless
- 网络编程系列之一 mysql
- 工作日志-4
- 在 ASP.NET 网页中显示动态生成的图片
- 在 Linux 操作系统中使用 Nginx 运行 ASP.NET 4
- DDMS - Dalvik Debug Monitor Service
- 批处理运行可执行文件