動態(tài)棧的存儲結(jié)構(gòu)及算法C語言實現(xiàn)

動態(tài)棧的存儲結(jié)構(gòu)及算法C語言實現(xiàn)

#include <stdio.h>  
#include <stdlib.h>  
#include <malloc.h>  
  
//棧的每個結(jié)點結(jié)構(gòu)定義  
typedef struct Node  
{  
    int data;  
    struct Node *pNext;  
}NODE, *PNODE;  
  
  
//棧結(jié)構(gòu)定義  
typedef struct Stack  
{  
    PNODE pTop;     //指向棧頂元素的指針  
    PNODE pBottom;  //指向棧底元素的下一個元素的指針(方便操作)  
}STACK, *PSTACK;  
  
  
//初始化棧  
void init(PSTACK pS)  
{  
    PNODE p = (PNODE)malloc(sizeof(NODE));  //為棧底元素的下一個元素分配內(nèi)存  
    if (p == NULL)  
    {  
        printf("內(nèi)存分配失敗,程序?qū)⒔K止\n");  
        exit(-1);  
    }  
    pS->pTop = pS->pBottom = p;  
    p->pNext = NULL;  
    return pS;  
}  
  
//判斷棧是否為空  
int isEmpty(PSTACK pS)  
{  
    if (pS->pTop == pS->pBottom)  
    {  
        return 0;  
    }  
    else  
    {  
        return -1;  
    }  
}  
  
//壓棧  
void push(PSTACK pS, int val)  
{  
    PNODE p = (PNODE)malloc(sizeof(NODE));  
    if (p == NULL)  
    {  
        printf("內(nèi)存分配失敗,程序?qū)⒔K止\n");  
        exit(-1);  
    }  
  
    p->pNext = pS->pTop;  
    p->data = val;  
    pS->pTop = p;  
    return;  
}  
  
//彈棧  
void pop(PSTACK pS)  
{  
    if (isEmpty(pS) == -1)  
    {  
        PNODE p = pS->pTop;     //暫時存放待刪結(jié)點  
        pS->pTop = p->pNext;  
        free(p);  
    }  
    else  
    {  
        printf("棧為空\n");  
    }  
}  
  
//清空棧  
void clear(PSTACK pS)  
{  
    while (isEmpty(pS) != 0)  
    {  
        pop(pS);  
    }  
}  
  
//遍歷整個棧  
void traverse(PSTACK pS)  
{  
    PNODE p = pS->pTop;        //定義p始終指向即將遍歷的元素  
    while (p != pS->pBottom)  
    {  
        printf("%d ", p->data);  
        p = p->pNext;  
    }  
    printf("\n");  
}  
  
int main()  
{  
    PSTACK pS;  
    init(pS);  
  
    push(pS, 1);  
    push(pS, 2);  
    push(pS, 3);  
    push(pS, 4);  
    push(pS, 5);  
    traverse(pS);  
    clear(pS);  
    traverse(pS);  
    return 0;  
}  
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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