队列的链式实现

队列:先进先出
主要掌握入队EnQueue和出队DeQueue操作
代码:

/**
    Name:   Link_Queue
    Author: Bryant_xw
    Date: 2018-09-28-20.12.11
*/
#include<bits/stdc++.h>
using namespace std;

typedef struct Node
{
    int n;
    struct Node* next;
}QueueNode;

typedef struct m_queue
{
    QueueNode* pHead;
    QueueNode* pTail;
    int nCount;
}Queue;


void init(Queue **que)
{
    *que = (Queue*)malloc(sizeof(Queue));
    (*que)->pHead = NULL;
    (*que)->pTail = NULL;
    (*que)->nCount = 0;
}

void Enqueue(Queue* que, int num)
{
    if(que == NULL)
        return ;
    QueueNode* pTemp = (QueueNode*)malloc(sizeof(QueueNode));
    pTemp->n = num;
    pTemp->next = NULL;

    if(que->pHead==NULL){
        que->pHead = pTemp;
    }else{
        que->pTail->next = pTemp;
    }
    que->pTail = pTemp;
    que->nCount++;
}

int DeQueue(Queue* que)
{
    if(que == NULL || que->nCount == 0)
        return -1;
    QueueNode* pDel = NULL;
    int res;
    pDel = que->pHead;
    que->pHead = que->pHead->next;
    res = pDel->n;
    free(pDel);
    que->nCount--;

    if(que->nCount == 0)
        que->pTail = NULL;
    return res;
}

int main(){

    Queue* que = NULL;
    init(&que);
    for(int i = 0; i < 5; ++i)
        Enqueue(que,i+2);
    printf("Queue size is:%d\n",que->nCount);
    printf("Queue contains: ");
    for(int i = 0; i < 5; ++i){
        if(i != 4)
            printf("%d ",DeQueue(que));
        else
            printf("%d",DeQueue(que));
    }
    return 0;
}













猜你喜欢

转载自blog.csdn.net/bryant_xw/article/details/84557967