C語言描述隊列的實現及操做(數組實現)

一.靜態數組實現

1.隊列接口

  

#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);

 

2.靜態數組隊列

#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);
}

 

二.動態數組實現

1.隊列接口

#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);

 

2.動態數組隊列

#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);
}
相關文章
相關標籤/搜索