C语言实现队列

来源:互联网 发布:gov.cn域名注册 编辑:程序博客网 时间:2024/06/05 11:48
队列特点:先进先出(First-IN First-OUT,FIFO)

队列操作:一般而言,队列是进队和出队,原则上来说从队列尾部进队,从队列头部出队

一、静态数组实现队列

#include#include#include#include#includeusing namespace std;#define QUEUE_SIZE 100#define ARRAY_SIZE (QUEUE_SIZE+1)#define QUEUE_TYPE intvoid create_queue(size_t size);void destory_queue();void q_insert(QUEUE_TYPE value);void q_delete(void);QUEUE_TYPE first(void);int isEmpty();int isFull();static QUEUE_TYPE queue[ARRAY_SIZE];static size_t front = 1;static size_t rear = 0;voidq_insert(QUEUE_TYPE value){assert(!isFull());rear = (rear + 1) % ARRAY_SIZE;queue[rear] = value;}voidq_delete(){assert(!isEmpty());front = (front + 1) % ARRAY_SIZE;}QUEUE_TYPEfirst(void){assert(!isEmpty());return queue[front];}int isEmpty(void){return (rear + 1) % ARRAY_SIZE == front;}intisFull(void){return (rear + 2) % ARRAY_SIZE == front;}

二、动态数组实现队列

#include#include#include#include#includeusing namespace std;#define QUEUE_TYPE intstatic size_t QueueSize;static QUEUE_TYPE *Queue;static QUEUE_TYPE font=1;static QUEUE_TYPE rear=0;void create_queue(size_t size);void destory_queue();void q_insert(QUEUE_TYPE value);void q_delete();QUEUE_TYPE first();int isEmpty();int isFull();voidcreate_queue(size_t size){assert(QueueSize==0);QueueSize = size;Queue = (QUEUE_TYPE*)malloc(QueueSize*sizeof(QUEUE_TYPE));assert(Queue != NULL);}voiddestory_queue(){assert(QueueSize>0);QueueSize = 0;free(Queue);}voidq_insert(QUEUE_TYPE value){assert(!isFull());rear = (rear + 1) % QueueSize;Queue[rear] = value;}voidq_delete(){assert(!isEmpty());font = (font + 1) % QueueSize;}QUEUE_TYPEfirst(){assert(!isEmpty());return Queue[font];}int isEmpty(){assert(QueueSize>0);return (rear+1)%QueueSize==font;}int isFull(){assert(QueueSize>0);return (rear + 2) % QueueSize == font;}

三、链表实现队列

#include#include#include#include#includeusing namespace std;#define QUEUE_TYPE inttypedef struct STRUCT_NODE {QUEUE_TYPE value;QueueNode *next;}QueueNode;static QueueNode *front;static QueueNode *rear;void destroy_queue();void qInsert(QUEUE_TYPE value);void qDelete();QUEUE_TYPE first();int isEmpty();int isFull();voiddestroy_queue(){while (!isEmpty())qDelete();}voidqInsert(QUEUE_TYPE value){QueueNode *new_node;new_node = (QueueNode*)malloc(sizeof(QueueNode));assert(new_node!=NULL);new_node->value = value;new_node->next = NULL;if (rear == NULL)front = new_node;elserear->next = new_node;rear = new_node;}voidqDelete(void){QueueNode *next_node;assert(!isEmpty());next_node = front->next;free(front);front = next_node;if (front == NULL)rear = NULL;}QUEUE_TYPEfirst(){assert(!isEmpty());return front->value;}int isEmpty(){return front == NULL;}int isFull(){return 0;}

原创粉丝点击