顺序栈基本操作

#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 1024
typedef int elemtype;
typedef struct SequenStack
{
    elemtype data[MAXSIZE];
    int top;                        //设置顺序栈的栈顶指针 
}SequenStack;                        //顺序栈的结构类型

SequenStack * Init_SequenStack();
int SequenStack_Length(SequenStack *S);
int SequenStack_Empty(SequenStack *S);
int SequenStack_Full(SequenStack *S);
int Push_SequenStack(SequenStack *S,elemtype x);
int Pop_SequenStack(SequenStack *S);
void menu();

void menu()
{   system("cls");
    printf("		1-initial stack
");
    printf("		2-input data
");
    printf("		3-get length
");
    printf("		4-判断栈空
");
    printf("		5-判断栈满
");
    printf("		6-出栈
");
    printf("		7-输出
");
    printf("		#-quit
");
    printf("Please select:  ");
}
int main()
{
    char cmd;
    SequenStack *S;
    elemtype x;
    int isdo,i,len;
    system("cls");
    menu();
    while((cmd=getchar())!='#')
    {
        switch(cmd)
        {    case '1':   S= Init_SequenStack( );
                        printf("
Creatied the stack!
");
                        printf("


			");
                        break;
            case '2':    printf("请插入数据 0结束
");
                        scanf("%d",&x);
                        while(x!=0)
                        {
                            isdo=Push_SequenStack(S,x);
                            if(isdo==0)
                            {    printf("栈满结束
");
                                break;
                            }
                            scanf("%d",&x);
                        }
                        printf("


			");
                        break;
            case '3':    len=SequenStack_Length(S);
                        printf("
Caculated the Length of the list...
");
                        printf("len=%d
",len);
                        printf("


			");
                        break;
            case '4':    isdo=SequenStack_Empty(S);
                        if(isdo==0)
                        {
                            printf("栈不是空
");
                        }
                        else if(isdo==1)
                        {
                            printf("栈为空
");
                        }
                        printf("


			");
                        break;
            case '5':    isdo=SequenStack_Full(S);
                        if(isdo==0)
                        {
                            printf("栈不满
");
                        }
                        else if(isdo==1)
                        {
                            printf("栈为满
");
                        }
                        printf("


			");
                        break;
            case '6':    printf("
Geting the top data of the stack...
");
                        isdo=Pop_SequenStack(S);
                        if(isdo==1)
                        {
                            len--;
                            printf("出栈成功
");
                            printf("新的栈顶元素:%d
",S->data[S->top]);
                        }
                        else if(isdo==0)
                        {
                            printf("出栈失败
");
                        }
                        printf("


			");
                        break;
            case '7':    while(S->top>=0)
                        {
                            printf("%d	",S->data[S->top]);
                            S->top--;                        
                        }
                        for(i=0;i<len;i++)
                        {
                            S->top++;
                        }
                        printf("


			");
                        break;
        }
        fflush(stdin);
        system("pause");
        menu();
    }
    return 0;
}
SequenStack * Init_SequenStack()        //初始化 
{
    SequenStack *S;                    //定义顺序栈指针变量 
    S=(SequenStack *)malloc(sizeof(SequenStack));            //申请内存空间 
    S->top=-1;
    return S; 
}
//判断栈空
int SequenStack_Empty(SequenStack *S)
{
    if(S->top==-1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
} 
//判断栈满
int SequenStack_Full(SequenStack *S)
{
    if(S->top+1==MAXSIZE)
    {
        return 1;
    }
    else
    {
        return 0;
    }
} 
//求顺序栈的长度
int SequenStack_Length(SequenStack *S)
{
    return S->top+1;
} 
//入栈
int Push_SequenStack(SequenStack *S,elemtype x)
{
    if(S->top>=MAXSIZE-1)
    {
        return 0;                                        //栈满,插入失败,返回0; 
    }
    else
    {
        S->top++;
        S->data[S->top]=x;
        return 1;
    }
}
//出栈
int Pop_SequenStack(SequenStack *S)
{
    if(S->top==-1)
    {
        return 0;                                    //栈空 
    }
    else
    {
        S->top--; 
        return 1;
    } 
} 
原文地址:https://www.cnblogs.com/xxs812/p/7977201.html