1. 程式人生 > >資料結構---列隊(單鏈表實現)

資料結構---列隊(單鏈表實現)

一、理論知識

待續

二、程式碼實現

1.節點結構體、棧頂、尾指標結構體定義

typedef int ElemType;
typedef struct node
{
    ElemType data;
    struct node* pNext;
}node,*pNode;

typedef struct Queue//儲存棧的頭。尾指標
{
    pNode front;
    pNode rear;
}Queue,*pQueue;

2.初始化棧

void initQueue(pQueue qu)
{
    qu->front = NULL;
    qu->rear = NULL;
}

3.判斷棧是否為空

bool isEmpty(pQueue qu)
{
    return (!qu->front) && (!qu->rear);
}

4.得到棧頂元素

ElemType getFrontData(pQueue qu)
{
    if (!isEmpty(qu))
    {
        return qu->front->data;
    }
    return -1;
}

5.壓棧

void pushQueue(pQueue qu,ElemType data)
{
    pNode newNode = new node;
    newNode->data = data;
    newNode->pNext = NULL;
    if (!qu->front)
    {
        qu->front = newNode;
        qu->rear = newNode;
    }
    else
    {
        qu->rear->pNext = newNode;
        qu->rear = newNode;
    }
}

6.出棧

void popQueue(pQueue qu)
{
    if (isEmpty(qu))
        return;
    pNode tempNode = qu->front->pNext;
    pNode delNode = qu->front;
    if (!tempNode)
    {
        qu->front = qu->rear = tempNode;
        delete delNode;
        delNode = NULL;
    }
    else
    {
        qu->front = tempNode;
        delete delNode;
        delNode = NULL;
    }
}

7.銷燬棧

void destoryQueue(pQueue qu)
{
    if (!isEmpty(qu))
    {
        pNode tempNode;
        while (qu->front)
        {
            tempNode = qu->front;
            qu->front = tempNode->pNext;
            delete tempNode;
        }
    }
}

8.列印棧內元素

void showQueue(pQueue qu)
{
    if (isEmpty(qu))
        printf("棧為空,無法列印!\n");
    pNode tempNode = qu->front;
    while (tempNode)
    {
        printf("%d->", tempNode->data);
        tempNode = tempNode->pNext;
    }
}

9.執行程式碼