鏈式棧-C語言實現


相對於順序棧的空間有限,鏈式棧的操作則更加靈活

 

#include<stdio.h>
#include<malloc.h>
typedef int SElemType;                    //元素類型
typedef int Status;                        //返回值類型
#define OK 1                            //操作成功
#define ERROR 0                            //操作失敗

typedef struct StackNode                //鏈棧結點結構體
{
    SElemType date;                        //節點數據
    struct StackNode *next;                //節點指針
}*LinkStackPtr;                            //結點名

typedef struct LinkStack                //鏈棧結構體
{
    LinkStackPtr top;                    //棧頂指針
    int count;                            //棧結點數量
}LinkStack;                                //棧名

/*鏈棧的入棧操作*/
Status Push(LinkStack *S, SElemType e)
{
    LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));        //申請新結點
    s->date = e;                            //新結點的數據等於e
    s->next = S->top;                        //新結點的下一結點等於現在的棧頂結點
    S->top = s;                                //棧頂結點等於新結點
    S->count++;                                //棧中數據加1
    return OK;
}

/*鏈棧的出棧操作*/
Status Pop(LinkStack *S, SElemType *e)
{
    if(S->count == 0)                //判斷棧是否為空
        return ERROR;
    LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));        //申請新結點
    s = S->top;                        //新結點等於當前棧頂結點
    *e = s->date;                    //e等於棧頂結點的數據
    S->top = s->next;                //棧頂等於新結點的下一結點
    free(s);                        //釋放新結點
    S->count--;                        //棧中數據減1
    return OK;
}

void main()
{
    LinkStack S;            //創建棧L
    S.count = 0;            //棧頂指針為-1,棧為空
    int e;                //入棧與出棧的元素

    while(true)
    {
        printf("請選擇對鏈棧的操作:\n");
        printf("1.入棧\n");
        printf("2.出棧\n");
        printf("3.退出\n");
        int a;
        scanf("%d", &a);
        switch(a)
        {
            case 1:
                printf("請輸入入棧的元素:");
                scanf("%d", &e);
                if(Push(&S, e))
                    printf("入棧成功\n");
                else
                    printf("入棧失敗\n");
                break;
            case 2:
                if(Pop(&S, &e))
                    printf("出棧的元素為:%d\n",e);
                else
                    printf("棧空\n");
                break;
            case 3:
                return;
            default:
                printf("選擇錯誤\n");
                break;
        }
    }
}

 


免責聲明!

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



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