首页 > 代码库 > C语言编程队列的实现
C语言编程队列的实现
<span style="font-size:24px;">queue.c</span>
<span style="font-size:24px;">功能函数:</span>
<span style="font-size:24px;"></span><pre name="code" class="objc">#include "queue.h" static void CopyToNode(Item item,Node *pn) { pn->item = item; } static void CopyToItem(Node *pn, Item *pi) { *pi = pn->item; } /* 把队列初始化为空,就是设置尾指针为NULL并设置项数(items成员)为0 */ void InitializeQueue(Queue *pq) { pq->front = pq->rear = NULL; pq->items = 0; } bool QueueIsFull( const Queue *pq) { return (pq->items == MAXQUEUE); } bool QueueIsEmpty( const Queue *pq) { return (pq->items == 0); } int QueueItemCount(const Queue *pq) { return pq->items; } bool EnQueue( Item item,Queue *pq) { Node * pnew; if (QueueIsFull(pq)) { return false; } pnew = (Node *)malloc(sizeof(Node)); if (pnew == NULL) { fprintf(stderr, "Unable to allocate memory!\n"); exit(1); } CopyToNode(item,pnew); pnew->next = NULL; if (QueueIsEmpty(pq)) { pq->front = pnew; /* 项目位于队列首端 */ } else { pq->rear->next = pnew; /* 链接到队列尾端 */ } pq->rear = pnew; /* 记录队列尾端的位置 */ pq->items++; /* 队列项目个数增1 */ return true; } bool DeQueue( Item *pitem, Queue *pq) { Node *pt; if (QueueIsEmpty(pq)) { return false; } CopyToItem(pq->front,pitem); pt = pq->front; pq->front = pq->front->next; free(pt); pq->items--; if (pq->items == 0) { pq->rear = NULL; } return true; } void EmptyTheQueue(Queue *pq) { Item dummy; while (!QueueIsEmpty(pq)) { DeQueue(&dummy,pq); } }
<span style="font-size:24px;">测试程序:</span>
<span style="font-size:24px;"></span><pre name="code" class="objc">#include "queue.h" int main(void) { Queue line; Item temp; char ch; InitializeQueue(&line); puts("Testing the queue interface, type a to add a value,"); puts("type d to delete a value ,and type q to quit"); while((ch =getchar())!= 'q') { if (ch !='a' && ch != 'd') { continue; } if (ch == 'a') { printf("integer to add:\n"); scanf("%d",&temp); if (!QueueIsFull(&line)) { printf("Putting %d into queue\n",temp); EnQueue(temp,&line); } else { puts("Queue is full"); } } else { if (QueueIsEmpty(&line)) { puts("没有了"); } else { DeQueue(&temp,&line); printf("删除了%d\n",temp); } } printf("%d item in queue\n",QueueItemCount(&line)); puts("type a to add ,d to delete, q to quit:"); } EmptyTheQueue(&line); puts("bye!"); }
<span style="font-size:24px;"></span>
C语言编程队列的实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。