數(shù)據(jù)結(jié)構(gòu)【動態(tài)?!看a實(shí)現(xiàn)

棧存入數(shù)據(jù),就像把東西往箱子里面放一樣,先放進(jìn)去的最后取出來。
如下圖所示:


動態(tài)棧圖.png

一個棧需要兩個指針標(biāo)識棧頂與棧底,棧頂以TOP標(biāo)識,棧底以BOTTOM來標(biāo)識。
棧底指針永遠(yuǎn)指向棧底元素。

代碼實(shí)現(xiàn):

typedef struct Node
{
    int nData;
    Node * pNext;
} * PNODE;

typedef struct Stack
{
    PNODE pTop;
    PNODE pBtm;
} *PSTACK;

void initStack(PSTACK pStack);
void push_Stack(PSTACK pStack, int nValue);
bool isEmpty_Stack(const PSTACK pStack);
void show_Stack(const PSTACK pStack);
void pop_Stack(PSTACK pStack);

int main()
{
    Stack oStack;

    initStack(&oStack);
    push_Stack(&oStack, 1);
    push_Stack(&oStack, 2);
    push_Stack(&oStack, 3);
    push_Stack(&oStack, 4);
    push_Stack(&oStack, 5);

    pop_Stack(&oStack);
    pop_Stack(&oStack);
    pop_Stack(&oStack);

    show_Stack(&oStack);
}

void initStack(PSTACK pStack)
{
    
    pStack->pBtm = (PNODE)malloc(sizeof(Node));
    if (nullptr == pStack->pBtm)
    {
        std::cout << "內(nèi)存申請失敗!";
        exit(-1);
    }
    pStack->pBtm->pNext = nullptr;

    pStack->pTop = (PNODE)malloc(sizeof(Node));
    if (nullptr == pStack->pTop)
    {
        std::cout << "內(nèi)存申請失敗!";
        exit(-1);
    }
    pStack->pTop->pNext = pStack->pBtm;
}

void push_Stack(PSTACK pStack, int nValue)
{
    //創(chuàng)建一個新節(jié)點(diǎn)
    PNODE pNewNode = (PNODE)malloc(sizeof(Node));
    if (nullptr == pNewNode)
    {
        std::cout << "內(nèi)存申請失敗!";
        exit(-1);
    }

    pNewNode->nData = nValue;

    PNODE pTempNode = pStack->pTop->pNext;
    pNewNode->pNext = pTempNode;
    pStack->pTop->pNext = pNewNode;
}

bool isEmpty_Stack(const PSTACK pStack)
{
    if (pStack->pTop->pNext == pStack->pBtm)
    {
        return true;
    }

    return false;
}

void show_Stack(const PSTACK pStack)
{
    if (isEmpty_Stack(pStack))
    {
        return;
    }

    PNODE pNode = pStack->pTop->pNext;
    while (pNode != pStack->pBtm)
    {
        std::cout << pNode->nData << "\t";
        pNode = pNode->pNext;
    }
}

void pop_Stack(PSTACK pStack)
{
    if (isEmpty_Stack(pStack))
    {
        return;
    }

    PNODE pTempNode = pStack->pTop->pNext;
    pStack->pTop->pNext = pTempNode->pNext;

    std::cout << "刪除的元素為:" << pTempNode->nData << "\n";
    free(pTempNode);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容