#數據結構#什么是棧及棧的作用


定義:一種可以實現“先進后出”的數據存儲結構

分類靜態棧:以數組為內核        動態棧:以鏈表為內核
算法:入棧(壓棧)/出棧
應用:函數調用、中斷、表達式求職、內存分配、緩沖處理、迷宮
【參考程序歷程】
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef struct Node
{
    int data;
    struct Node * pNext;
}NODE, * PNODE;

typedef struct Stack
{
    PNODE pTop;
    PNODE pBottom;
}STACK, * PSTACK;

void init(PSTACK);//初始化
void push(PSTACK, int);//壓棧
void traverse(PSTACK);//遍歷
bool pop(PSTACK, int *);//出棧
void clear(PSTACK pS);//清除


int main(void)
{
    STACK S;
    int val;

    init(&S);//創建一個空棧
    push(&S, 1);//壓棧
    push(&S, 2);//
    push(&S, 3);
    push(&S, 4);
    push(&S, 5);
    push(&S, 6);

    traverse(&S);//遍歷輸出

    clear(&S);

    if( pop(&S, &val) )
    {
        printf("出棧成功,出棧元素為%d\n", val);
    }
    else
    {
        printf("出棧失敗!\n");
    }
    traverse(&S);

    return 0;
}

void init(PSTACK pS)
{
    pS->pTop = (PNODE)malloc(sizeof(NODE));//動態分配一塊內存(在堆中分配),
    if(NULL == pS->pTop)
    {
        printf("動態內存分配失敗!\n");
        exit(-1);
    }
    else
    {
        pS->pBottom = pS->pTop;
        pS->pTop->pNext = NULL;
    }
}

void push(PSTACK pS, int val)
{
    PNODE pNew = (PNODE)malloc(sizeof(NODE));

    pNew->data = val;
    pNew->pNext = pS->pTop;

    pS->pTop = pNew;

    return;

}

void traverse(PSTACK pS)
{
    PNODE p = pS->pTop;
    while(p != pS->pBottom)
    {
        printf("%d\n", p->data);
        p = p->pNext;
    }
    printf("\n");
}

bool empty(PSTACK pS)
{
    if(pS->pTop == pS->pBottom)
        return true;
    else
        return false;
}

bool pop(PSTACK pS, int * pVal)
{
    if(empty(pS))
    {
        return false;
    }
    else
    {
        PNODE r = pS->pTop;
        *pVal = r->data;
        pS->pTop = r->pNext;
        free(r);
        r = NULL;
        
        return true;
    }
}

void clear(PSTACK pS)
{
    if(empty(pS))
    {
        return;
    }
    else
    {
        PNODE p = pS->pTop;
        PNODE q = NULL;

        while(p != pS->pBottom)
        {
            q = p->pNext;
            free(p);
            p = q;
        }
        pS->pTop = pS->pBottom;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM