数据结构--队列(C语言版)

/*

        main 函数部分

*/

#include <stdio.h>
#include <stdlib.h>
#include "MQueue.h"
/*
    队列:和时间因素有关的方面都需要队列
*/
int main()
{
    int del;

    pMQueue pQueue;
    Init(pQueue);
    EnQueue(pQueue, 3);
    EnQueue(pQueue, 4);
    EnQueue(pQueue, 5);
    EnQueue(pQueue, 6);
    EnQueue(pQueue, 7);
    EnQueue(pQueue, 8);
    EnQueue(pQueue, 9);

    Traverse(pQueue);

    DeQueue(pQueue, & del);
    Traverse(pQueue);


    return 0;
}

/*

        函数声明的头文件部分 MQueue.h

*/

#ifndef MQUEUE_H_INCLUDED
#define MQUEUE_H_INCLUDED
#include <stdbool.h>

typedef struct _mqueue
{
    int * base;
    int Front;
    int Rear;
}* pMQueue, MQueue;

void Init(pMQueue);            //初始化
bool EnQueue(pMQueue, int);    //入队
bool DeQueue(pMQueue, int *);  //出队
void Traverse(pMQueue);        //遍历
bool FullQueue(pMQueue);       //判断是否满
bool EmptyQueue(pMQueue);      //判断是否为空


#endif // MQUEUE_H_INCLUDED

/*

        函数声明的头文件实现部分 MQueue.c

*/

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "MQueue.h"

void Init(pMQueue pQueue)//初始化
{
    pQueue->base = (int *)malloc(sizeof(int) * 6);//为数组动态分配内存空间,大小为6个int型
    pQueue->Front = 0;
    pQueue->Rear = 0;

    return;
}

bool EnQueue(pMQueue pQueue, int val)//入队
{
    if(FullQueue(pQueue)){
        return false;
    }
    else
    {
        pQueue->base[pQueue->Rear] = val;
        pQueue->Rear = (pQueue->Rear + 1) % 6;//后移pQueue->Rear的位置

        return true;
    }
}

bool DeQueue(pMQueue pQueue, int * pDel)//出队
{
    if(EmptyQueue(pQueue)){
        return false;
    }
    else{
        pDel = pQueue->base[pQueue->Front];
        pQueue->Front = (pQueue->Front + 1) % 6;
        return true;
    }
}

bool FullQueue(pMQueue pQueue)//判满
{
    if((pQueue->Rear + 1) % 6 == pQueue->Front){
        return true;
    }
    else{
        return false;
    }
}

bool EmptyQueue(pMQueue pQueue)//判空
{
    if(pQueue->Front == pQueue->Rear){
        return true;
    }
    else{
        return false;
    }
}

void Traverse(pMQueue pQueue)//遍历
{
    int Temp = pQueue->Front;
    printf("\n");
    while(Temp != pQueue->Rear)
    {
        printf("%d\t", pQueue->base[Temp]);
        Temp = (Temp+1) % 6;
    }

    return;
}



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