C語言數據結構——棧

  數據結構的一些講解,供學習者參考,也順帶作爲複習

  棧是限制在表的一端進行插入和刪除的線性表,允許插入、刪除的一段成爲棧頂,另一個固定端稱爲棧底,當表中沒有元素時稱爲空棧。如圖所示的棧中有3個元素,進棧的順序是a1、a2、a3,當需要出棧時其順序爲a3、a2、a1,所以棧又稱爲後進先出的線性表(Last In First Out),簡稱LIFO表。
  CSDN
  
  
初始置空棧算法

SeqStack *Init_SeqStack()
{
    SeqStack *s;
    s=(SeqStack *)malloc(sizeof(SeqStack));//申請棧空間
    s->top=-1;//初始化棧頂指針
    return s;
}

判斷是否爲空棧

int Empty_SeqStack(SeqStack *s)
{
    if(s->top==-1)
        return 1;
    else 
        return 0;

}

入棧算法

int Push_SeqStack(SeqStack *s,int x)
{
    if(s->top==MAXSIZE-1)//棧滿不能入棧
    {
        printf("棧滿不能入棧\n");
        return 0;
    }
    else 
    {
        s->top++;
        s->data[s->top]=x;
        return (printf("入棧成功!\n"));
    }
}

出棧

int Pop_SeqStack(SeqStack *s,int *x)
{
    if(Empty_SeqStack(s))//棧空不能出棧
        return 0;
    else
    {
        *x=s->data[s->top];//棧頂元素存入*x,返回
        s->top--;//更新棧頂指針
        return 1;
    }
}

取棧頂元素

int Top_SeqStack(SeqStack *s,int *x)
{
    if(Empty_SeqStack(s))//棧空無元素
        return 0;
    else
    {
        *x=s->data[s->top];
        return 1;
    }
}

輸出棧內所有元素

int Out_SeqStack(SeqStack *s)
{
    int i=s->top;
    if(Empty_SeqStack(s))
        return 0;
    while(s->top>-1)
    {
        printf("%3d",s->data[s->top]);
        s->top--;
    }
    s->top=i;
    return 1;
}

主函數實現

void main()
{
    int model,item,flag;
    SeqStack *seqstack=NULL;
    seqstack=Init_SeqStack();
    while(1)
    {
        printf("請選擇\n【1】入棧\n【2】出棧\n【3】取棧頂元素\n【4】輸出棧內所有元素\n【5】退出程序\n");
        printf("請輸入:  ");
        scanf("%d",&model);
        switch(model)
        {
            case 1:
                while(1)
                {
                    printf("請輸入插入的值('0'代表輸入結束):  ");
                    scanf("%d",&item);
                    if(item==0)
                        break;
                    if(!Push_SeqStack(seqstack,item))
                        break;
                }
                break;
            case 2:
                Pop_SeqStack(seqstack,&flag);
                printf("棧頂元素 %d 已成功出棧!\n",flag);
                break;
            case 3:
                Top_SeqStack(seqstack,&flag);
                printf("棧頂元素爲: %d\n",flag);
                break;
            case 4:
                Out_SeqStack(seqstack);
                printf("\n");
                break;
            case 5:
                exit(0);
            default :
                break;
        }
    }
}

程序執行初始界面

需要源代碼的歡迎下載,免積分,共同學習,家下來每天都會分享一篇,持續一個星期
源程序下載請點擊此處,歡迎指正

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章