1. 程式人生 > >c語言實現通用資料結構(二):通用佇列

c語言實現通用資料結構(二):通用佇列

     注意佇列中只儲存了指標,沒有儲存實際的資料。

     標頭檔案 myQueue.h

#ifndef MYQUEUE_H_INCLUDED
#define MYQUEUE_H_INCLUDED

#include "myList.h"

typedef MyList MyQueue;

//建立佇列
MyQueue * createMyQueue();

//釋放佇列
void freeMyQueue(MyQueue * queue);

//插入
void myQueueAdd(MyQueue* const queue, void* const data);

//刪除
void* myQueueRemove(MyQueue * const queue);

//取得隊頭
void* myQueueGetTop(const MyQueue * const queue);

#endif // MYQUEUE_H_INCLUDED


原始檔 myQueue.c

#include "myQueue.h"

//建立佇列
MyQueue * createMyQueue()
{
    return createMyList();
}

//釋放佇列
void freeMyQueue(MyQueue * queue)
{
    freeMyList(queue);
}

//插入
void myQueueAdd(MyQueue* const queue, void* const data)
{
    myListInsertDataAtLast(queue, data);
}

//刪除
void* myQueueRemove(MyQueue * const queue)
{
    return myListRemoveDataAtFirst(queue);
}

//取得隊頭
void* myQueueGetTop(const MyQueue * const queue)
{
    return myListGetDataAtFirst(queue);
}

測試檔案 main.c
/*************************
*** File main.c
*** test for MyQueue
**************************/
#include <stdio.h>
#include <stdlib.h>
#include "myQueue.h"

typedef struct a
{
    int i;
    char c;
} A;


int main()
{
    const int S =10;

    //建立並初始化資料
    A * data= malloc(sizeof(A)*S);
    for (int i=0; i< S; i++)
    {
        data[i].i=i;
        data[i].c=(char)('A'+i);
    }

    //建立佇列
    MyQueue * queue= createMyQueue();

    //插入資料
    myQueueAdd(queue, &data[0]);
    myQueueAdd(queue, &data[2]);
    myQueueAdd(queue, &data[6]);

    //測試刪除
    while(myListGetSize(queue))
    {
        A * pp = myQueueRemove(queue);
        printf("%d[%c] ", pp->i, pp->c);
    }
    puts("");

    //釋放連結串列
    freeMyQueue(queue);

    //釋放資料
    free(data);
    return 0;
}