浏览 1869 次
锁定老帖子 主题:关于C循环队列。
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-05-12
#include <stdio.h> #include <malloc.h> //定义一个队列 typedef struct Queue { int* pBase; int front; int rear; } QUEUE; void init(QUEUE * pQ); bool full_queue(QUEUE* pQ); bool en_queue(QUEUE* pQ,int val); void traverse_queue(QUEUE * pQ); bool empty_queue(QUEUE * pQ); bool out_queue(QUEUE* pQ,int * val); int main(void) { QUEUE queue; init(&queue); en_queue(&queue,1); en_queue(&queue,2); en_queue(&queue,3); en_queue(&queue,4); en_queue(&queue,5); en_queue(&queue,6); traverse_queue(&queue); int val = 0; if(out_queue(&queue,&val)) { printf("出队成功,出队的数据是:%d\n",val); } else { printf("出队失败!\n"); } traverse_queue(&queue); return 0; } //初始化队列 void init(QUEUE * pQ) { pQ->pBase = (int *)malloc(sizeof(QUEUE)); pQ->front = 0; pQ->rear = 0; } //判断队列是否是满的 bool full_queue(QUEUE* pQ) { return (pQ->rear+1)%6 == pQ->front; } //入队 bool en_queue(QUEUE* pQ,int val) { if(full_queue(pQ)) return false; pQ->pBase[pQ->rear] = val; pQ->rear = (pQ->rear+1) % 6; return true; } //遍历队列 void traverse_queue(QUEUE * pQ) { int temp = pQ->front; while(temp != pQ->rear) { printf("%-3d",pQ->pBase[temp]); temp = (temp +1) % 6; } printf("\n"); } //判断队列是否为空 bool empty_queue(QUEUE * pQ) { return pQ ->front == pQ ->rear; } //出队 bool out_queue(QUEUE* pQ,int * val) { if(empty_queue(pQ)) return false; //取出队列前面(front)的值,并向后移动一个位置 *val = pQ->pBase[pQ->front]; pQ->front = (pQ->front+1) % 6; return true; } 小弟我最近看数据结构的书,想加强对队列的认知。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |