首页 > 代码库 > 队列及其应用
队列及其应用
1.队列的基础
队列是插入只能在一端(后端),删除只能在另一端(前端)的线性表,是先进先出模型。
1. 入队:在表的末端插入;
2. 出队:在表的开头删除元素;
2.队列的应用
汽车加油站
模拟打印机缓冲区
CPU分时系统、计算机网络
打印杨辉三角
3.队列的数组实现
1. fatal.h
#include <stdio.h> #include <stdlib.h> #define Error( Str ) FatalError( Str ) #define FatalError( Str ) fprintf( stderr, "%s\n", Str ),system("puase"),getchar(),exit( 1 )
2.queue.h
#include <stdio.h> typedef int ElementType; #ifndef _Queue_h struct QueueRecord; typedef struct QueueRecord *Queue; int IsEmpty(Queue Q); int IsFull(Queue Q); Queue CreateQueue(int MaxElements); void DisposeQueue(Queue Q); void MakeEmpty(Queue Q); void Enqueue(ElementType X, Queue Q); ElementType Front(Queue Q); void Dequeue(Queue Q); ElementType FrontAndDequeue(Queue Q); #endif
3.queue.c
#include "queue.h" #include "fatal.h" #include <stdlib.h> #define MinQueueSize (5) struct QueueRecord { int Capacity; int Front; int Rear; int Size; ElementType *Array; }; int IsEmpty(Queue Q) { return Q->Size == 0; } Queue CreateQueue(int MaxElements) { Queue Q; if (MaxElements < MinQueueSize) { Error("Queue is too small\n"); } Q = malloc(sizeof(struct QueueRecord)); if (Q==NULL) { FatalError("out of space!!!"); } Q->Array = malloc(sizeof(ElementType)*MaxElements); if (Q->Array == NULL) { FatalError("out of space!!!"); } Q->Capacity = MaxElements; MakeEmpty(Q); return Q; } int IsFull(Queue Q) { return Q->Size == Q->Capacity; } void MakeEmpty(Queue Q) { Q->Size = 0; Q->Front = 1; Q->Rear = 0; } ElementType Front(Queue Q) { if (!IsEmpty(Q)) { return Q->Array[Q->Front]; } Error("Empty Queue\n"); return 0; } static int Succ(int Value, Queue Q) { if (++Value=http://www.mamicode.com/=Q->Capacity)"Full Queue\n"); } else { Q->Size++; Q->Rear = Succ(Q->Rear, Q); Q->Array[Q->Rear] = X; } } void Dequeue(Queue Q) { if (!IsEmpty(Q)) { Q->Size--; Q->Front = Succ(Q->Front, Q); } else { Error("Empty Queue\n"); } } ElementType FrontAndDequeue(Queue Q) { ElementType X = 0; if (IsEmpty(Q)) { Error("Empty Queue\n"); } else { Q->Size--; X = Q->Array[Q->Front]; Q->Front = Succ(Q->Front, Q); } return X; } void DisposeQueue(Queue Q) { if (Q!=NULL) { free(Q->Array); free(Q); Q = NULL; } }
4.testqueue.c
#include "queue.h" #include "fatal.h" #include <stdio.h> #include <stdlib.h> void main() { Queue Q; Q = CreateQueue(10); for (int i = 0; i < 10; i++) { Enqueue(i, Q); } for (int i = 0; i < 10; i++) { ElementType data = http://www.mamicode.com/Front(Q);"%d\t", data); Dequeue(Q); } printf("\n\n"); for (int i = 0; i < 10; i++) Enqueue(i, Q); for (int i = 0; i < 10; i++) { ElementType data = http://www.mamicode.com/FrontAndDequeue(Q);"%d\t", data); } printf("\n\n"); DisposeQueue(Q); system("pause"); }
队列及其应用
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。