#include<stdio.h> // 一個隊列模塊接口 // 命名爲myqueue.h #define QUEUE_TYPE int // 定義隊列類型爲int // enqueue函數 // 把一個新值插入隊列末尾 void enqueue(QUEUE_TYPE value); // dequeue函數 // 刪除隊列首元素並返回 QUEUE_TYPE dequeue(void ); // is_empty函數 // 判斷隊列是否爲空 bool is_empty(void); // is_full函數 // 判斷隊列是否已經滿 bool is_full(void); // front函數 // 返回隊列第一個值 QUEUE_TYPE front_value(void); // get_size函數 // 獲取隊列元素個數 int get_size(void);
#include<stdio.h> #include<assert.h> #include"myqueue.h" const int QUEUE_SIZE=100; //隊列中元素個數最大限制 static QUEUE_TYPE queue[QUEUE_SIZE+1]; //存儲隊列中值的數組 static int front = 0; //指向隊列首元素的指針 static int rear = 0; //指向隊列尾元素的指針 void enqueue(QUEUE_TYPE value) { // 判斷隊列是否爲滿 assert(!is_full()); // 判斷隊列是否爲空 if (is_empty()) queue[front] = value; queue[rear] = value; rear = (rear + 1) % (QUEUE_SIZE + 1); } QUEUE_TYPE dequeue(void) { //判斷隊列是否爲空 assert(!is_empty()); int temp = queue[front]; front = (front + 1) % (QUEUE_SIZE + 1); return temp; } bool is_empty(void) { //若是rear==front則隊列爲空 return rear == front; } bool is_full(void) { //若是(rear+1)%(QUEUE_SIZE+1)==front則隊列爲滿 return (rear + 1) % (QUEUE_SIZE + 1) == front; } QUEUE_TYPE front_value(void) { return queue[front]; } int get_size(void) { return (rear-front); }
#include<stdio.h> // 在原有基礎上增長了creat_queue和destroy_queue函數 #define QUEUE_TYPE int // 定義隊列類型爲int // creat_queue函數 // 建立一個隊列 void creat_queue(size_t size); // destroy_queue函數 // 銷燬隊列 void destroy_queue(void); // enqueue函數 // 把一個新值插入隊列末尾 void enqueue(QUEUE_TYPE value); // dequeue函數 // 刪除隊列首元素並返回 QUEUE_TYPE dequeue(void ); // is_empty函數 // 判斷隊列是否爲空 bool is_empty(void); // is_full函數 // 判斷隊列是否已經滿 bool is_full(void); // front函數 // 返回隊列第一個值 QUEUE_TYPE front_value(void); // get_size函數 // 獲取隊列元素個數 int get_size(void);
#include<stdio.h> #include<assert.h> #include<malloc.h> static QUEUE_TYPE *queue; //定義隊列指針 static size_t queue_size; //記錄隊列大小 static int front = 0; static int rear = 0; void creat_queue(size_t size) { assert(queue_size == 0); queue_size = size; queue =(QUEUE_TYPE*) malloc((queue_size+1)*sizeof(QUEUE_TYPE)); assert(queue != NULL); } void destroy_queue(void) { assert(queue_size > 0); queue_size = 0; free(queue); queue = NULL; } void enqueue(QUEUE_TYPE value) { // 判斷隊列是否爲滿 assert(!is_full()); // 判斷隊列是否爲空 if (is_empty()) queue[front] = value; queue[rear] = value; rear = (rear + 1) % (queue_size + 1); } QUEUE_TYPE dequeue(void) { //判斷隊列是否爲空 assert(!is_empty()); int temp = queue[front]; front = (front + 1) % (queue_size + 1); return temp; } bool is_empty(void) { //若是rear==front則隊列爲空 return rear == front; } bool is_full(void) { //若是(rear+1)%(QUEUE_SIZE+1)==front則隊列爲滿 return (rear + 1) % (queue_size + 1) == front; } QUEUE_TYPE front_value(void) { return queue[front]; } int get_size(void) { return (rear - front); }