c语言顺序栈常规插入删除操作

#include 
#include 
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);//出栈,此时数据还在数组里面
    }

}

输入输出样例如下
c语言顺序栈常规插入删除操作_第1张图片

你可能感兴趣的:(指针,数据结构,c语言,链表,栈)