数据结构伪代码的实现(队列篇)

数据结构伪代码的实现(队列篇)
以循环队列为例

#include
#include
#include
#define MAXSIZE 6 
/*
    定义数组最大长度 
    接下来有很多操作都是对MAXSIZE取余
    这是一个循环队列 
    当队列满的时候需要 需要将队尾指向对头
    例判断队列是否已满:
    if((pQ->rear+1)%MAXSIZE==pQ->front)
*/
typedef struct Queue
{
    int *pBase;//新建数组的首地址
    int front;
    int rear;
}QUEUE;

void init(QUEUE *);
bool en_queue(QUEUE *,int );
bool full_queue(QUEUE*);
void traverse_queue(QUEUE *);
bool out_queue(QUEUE *,int *);
bool empty_queue(QUEUE *);

int main(void)
{
    QUEUE Q;
    int val;

    init(&Q);//创建队列  初始化front和rear
    if(empty_queue(&Q))
        printf("队列为空!\n");
    printf("插入数:\n");
    en_queue(&Q,1);
    en_queue(&Q,2);
    en_queue(&Q,3);
    en_queue(&Q,4);
    en_queue(&Q,5);
    en_queue(&Q,6);
    if(empty_queue(&Q))
        printf("队列为空!\n");
    traverse_queue(&Q);
    if(out_queue(&Q,&val))
    {
        printf("出对成功!出队元素是:%d!\n",val);
    }else  printf("出队失败!\n");
    traverse_queue(&Q);

    return 0;
}

void init(QUEUE *pQ)
{
    pQ->pBase=(int*)malloc(sizeof(int)*MAXSIZE);
    pQ->front=0;
    pQ->rear=0;
}

bool full_queue(QUEUE *pQ)
{
    //注意rear指向的是队列最后一个有效元素的下一个元素
    if((pQ->rear+1)%MAXSIZE==pQ->front)
        return true;
    else return false;
}

bool en_queue(QUEUE* pQ,int val)//插入
{
    if(full_queue(pQ))
    {
        return false;
    }else 
    {
        pQ->pBase[pQ->rear]=val;
        pQ->rear=(pQ->rear+1)%MAXSIZE;
    }
}

void traverse_queue(QUEUE *pQ)//遍历
{
    int i=pQ->front;

    while(i!=pQ->rear)
    {
        printf("%d  ",pQ->pBase[i]);
        i=(i+1)%MAXSIZE;
    }
    printf("\n");
}

bool empty_queue(QUEUE* pQ)
{
    if(pQ->front==pQ->rear)
        return true;
    else return false;
}

bool out_queue(QUEUE *pQ,int *pVal)
{
    if(empty_queue(pQ))
    {
        return false;
    }else  
    {
        *pVal=pQ->pBase[pQ->front];
        pQ->front=(pQ->front+1)%MAXSIZE;
        return true;
    }
}

你可能感兴趣的:(数据结构伪代码的实现(队列篇))