栈的实现——顺序表示

#include <stdio.h>
#include <stdlib.h>
struct SeqStack{
    int MAXNUM;
    int t;   /* 栈顶位置,而不是元素*/
    int *s;
};
typedef struct SeqStack *PSeqStack;    /* 顺序栈类型的指针类型      ,,重命名 */
PSeqStack createEmptyStack_seq(int m)          /*创建一个空栈*/
    {
    PSeqStack stack = (PSeqStack)malloc(sizeof(struct SeqStack));   /* 申请  该结构的  空间*/
    if(stack->t!=-1){                                    /*创建一个空栈,将栈顶元素赋值为 -1    !=-1 即是不是空栈*/
        stack->s=(int)malloc(sizeof(int)*m);            /*  申请  m  大小的  该类型空间*/
        if(stack->s){
            stack->MAXNUM=m;
            stack->t=0;
            return stack;
        }
        else free(stack);
}
    printf("Out of space!\n");
    return NULL;
}
int isEmptyStack_seq(PSeqStack pastack)           /*判断栈是否为空*/
{
    return(pastack->t==-1);  /*判断是否为空栈,是空栈返回 -1,,,否则返回 0  */
}
void push_seq(PSeqStack pastack,int x)     /*进栈*/
    {
        if(pastack->t>=pastack->MAXNUM)
            printf("Overflow!\n");
        else{
            pastack->t=pastack->t+1;   /*当栈不满时,先修改栈顶变量,将其值 +1,  */
            pastack->s[pastack->t]=x;       /*然后把x 元素放入栈顶所指的位置中。*/
        }
 }
 void pop_seq(PSeqStack pastack)      /*出栈*/
   {
     if(pastack->t==-1){
        printf("Underflow!\n");
     }
     else{
        pastack->t=pastack->t-1;  /*将栈顶元素下移一个位置   但是实际上该数据元素还占据原来的位置,当新的元素进栈时将全覆盖  */
     }
 }
 int top_seq(PSeqStack pastack)                /*取出栈顶元素*/
 {
     if(pastack->t==-1)
     printf("It is empty!\n");
     else                               /*栈不为空的时候,将栈顶元素取出,而栈本身并未发生变化*/
     return(pastack->s[pastack->t]);
 }


int main()
{
    int n,m=1;
    printf("您需要多大空间的栈:\n");
    scanf("%d",&n);
    PSeqStack A=createEmptyStack_seq(n);
    while(m==1){
        printf("\n请选择您需要执行操作\n");
         printf("1:打印:\n");
         printf("2:入栈:\n");
         printf("3:出栈:\n");
         printf("4:取栈顶元素:\n");
         int op;
         int a,i,j,k;
         scanf("%d",&op);
         switch(op){
           case 1:
               printf("打印:");
                j=A->t;
               for(i=1;i<=j;i++)
                    printf("%d ",A->s[i]);


               break;
           case 2:
                printf("入栈:");
                for(k=0;k<A->MAXNUM;k++){
                     printf("\n请输入:");
                   scanf("%d",&a);


                push_seq(A,a);
                }


                break;
           case 3:
                printf("出栈\n");
                 printf("%d\n",A->s[A->t]);
                pop_seq(A);
                break;
           case 4:
                printf("取栈顶元素:\n");
                top_seq(A);
                printf("%d\n",A->s[A->t]);
                break;
         }
         printf("\n继续操作请输入“1”,退出输入“0”\n");
         scanf("%d",&m);


    }
    printf("\     退出操作");
}
发布了23 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_35001005/article/details/51492897