c語言順序棧常規插入刪除操作

千萬不要停啊發表於2020-10-10
#include <stdio.h>
#include <stdlib.h>
typedef int DataTapy;
struct Stack
{
    int MAX;//最大容量
    int top;//棧頂指標
    DataTapy *elem;//存放元素的陣列起始指標
};
typedef struct Stack *SeqStack;//定義順序棧型別
SeqStack SetNullStack_sqe(int m)
{
    SeqStack sstack=(SeqStack)malloc(sizeof(struct Stack));
    if(sstack!=NULL)
    {
        sstack->elem=(int*)malloc(sizeof(int)*m);
        if(sstack->elem!=NULL)
        {
            sstack->MAX=m;
            sstack->top=-1;
            return sstack;
        }
        else
        {
            free(sstack);
            return NULL;
        }
    }
    else
    {
        printf("Out of space");
        return NULL;

    }
}
int IsNullStack_Sqe(SeqStack sstack)
{
    if(sstack->top==-1)
        return 1;
    else
        return 0;

}
void Push_Sqe(SeqStack sstack,int x)
{
    if(sstack->top>=(sstack->MAX-1))//檢查棧是否滿
       {
           printf("overflow!\n");
       }
    else
        {
            sstack->top++;//若不滿,先修改棧頂變數
            sstack->elem[sstack->top]=x;//把元素x放到棧頂變數中的位置
        }
}
void Pop_Sqe(SeqStack sstack)
{
    if(IsNullStack_Sqe(sstack)==1)//判斷棧是否為空
        printf("underflow");
    else
        sstack->top=sstack->top-1;//棧頂變數-1;
}
DataTapy Top_Seq(SeqStack sstack)//求棧頂元素的值
{
    if(IsNullStack_Sqe(sstack)==1)//判斷sstack是否為空棧
    {
        printf("it is empty stack");

    }
    else
    {
        return sstack->elem[sstack->top];
    }
}
int main()
{
    SeqStack q=SetNullStack_sqe(5);//建立一個空棧
    int data;
    printf("請輸入進棧的元素,以0結束:");
    scanf("%d",&data);
    while(data!=0)
    {
        Push_Sqe(q,data);
        scanf("%d",&data);//進棧
    }
    printf("出棧元素的順序是:");
    while(IsNullStack_Sqe(q)!=1)
    {
        printf("%d ",Top_Seq(q));//取棧頂元素
        Pop_Sqe(q);//出棧,此時資料還在陣列裡面
    }

}

輸入輸出樣例如下
在這裡插入圖片描述

相關文章