隊列的循環存儲C實現

   隊列是一種先進先出(FIFO)的線性表,只允許在一端(隊尾)進行插入操作,另一端(隊首)進行刪除操作。

   隊列的順序存儲結構是用一組連續的地址空間存放隊列元素。在隊尾進行插入元素使空間不斷減少,而在隊首進行刪除操作使空間增多。順序隊列的弊端在於增加的空閒空間不能重新利用,而循環隊列的首尾連接在一起,進行刪除操作增加的空間能夠重新利用。

   下面是代碼:

#include<stdio.h>
#include<malloc.h>
#define OK 0
#define ERROR -1
#define OVERFLOW  -1
//循環隊列的存儲結構
#define MAXSIZE 100
typedef struct {
    int *base;
    int front;
    int rear;
}queue;
int init_queue(queue *q)
{
    q->base = (int*)malloc(MAXSIZE * sizeof(int));
    if(!q->base)
        exit(OVERFLOW);
    q->front = q->rear = 0;
    return OK;
}
int enqueue(queue * q, int e)
{
    if((q->rear + 1)%MAXSIZE == q->front )
        return ERROR;
    q->base[q->rear] = e;
    q->rear = (q->rear+1)%MAXSIZE;
    return OK;
}
int dequeue(queue * q, int *e)
{
    if(q->rear == q->front)
    return ERROR;
    *e = q->base[q->front];
    q->front = (q->front+1)% MAXSIZE;
    return OK;
}
int main()
{
    queue q;
    int i;
    int e;
    printf("init queue\n");
    init_queue(&q);
    printf("enqueue\n");
    for(i = 0; i < 10; i++)
    {
        enqueue(&q, i);
        printf("%3d", i);
    }
      
    printf("\ndequeue\n");
    for( i = 0; i < 10; i++)
    {
        dequeue(&q, &e);
        printf("%3d", e);
    }
    printf("\n");
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章