顺序栈的基本操作

/*
 * 用顺序表实现栈的操作
 */
#include<stdio.h>

int stack[10]; //栈的定义
int top =  -1; //栈顶指针(一个保存数组下标的变量)
typedef struct
{
   char data[10];
   int top;
}SeqStack;
int main()
{

 void InitStack(SeqStack *s);
 int Push(SeqStack *s, char x);
 int Pop(SeqStack *s,char *x);
 int GetTop(SeqStack *s,char *x);
 int IsEmpty(SeqStack *s);
 int Size(SeqStack *s);

    SeqStack Seq;  //实例化一个栈对象
    SeqStack *s=&Seq;  //定义一个指向栈地址的指针
    char a;     
    char *e=&a;

    InitStack(s); //对栈进行初始化 

    printf("栈%s\n",(IsEmpty(s)==1?"空":"不空"));  
    printf("a进栈\n");  
    Push(s,'a');  
    printf("b进栈\n");  
    Push(s,'b');  
    printf("c进栈\n");  
    Push(s,'c');  
    printf("d进栈\n");  
    Push(s,'d');  
    printf("栈%s\n",(IsEmpty(s)==1?"空":"不空"));  
    GetTop(s,e);  
    printf("栈顶元素:%c\n",a);  
    printf("出栈次序:\n");  
    while(!IsEmpty(s))  
    {  
        printf("栈中元素有%d个 ",Size(s));  
        Pop(s,e);  
        printf("%c\n",a);  
    }  
    printf("\n");  
    return 0;    

}

void InitStack(SeqStack *s)//创建一个栈  
{  
    s->top = -1;  
}  
int Push(SeqStack *s, char x)//进栈操作  
{
   if(s->top==9){//表示栈满
        return 0; 
     }
   else{
      s->top++;
      s->data[s->top]= x;
      return 1;
    }
}
int Pop(SeqStack *s,char *x)  //出栈操作
{
   if(s->top == -1){
        return 0;
     }
   else{
     *x = s->data[s->top];
     s->top--;
     return 1;
    }
}

int GetTop(SeqStack *s,char *x)   //取栈顶元素  
{  
    if(s->top==-1)  
        return 0;  
    else  
    {  
        *x=s->data[s->top];  
        return 1;  
    }  
}

int IsEmpty(SeqStack *s)  //判断栈空  
{  
    if(s->top==-1)  
        return 1;  
    else  
        return 0;  
}  

int Size(SeqStack *s)//返回栈中元素的个数  
{  
    return s->top+1;  
}  

猜你喜欢

转载自blog.csdn.net/zuiziyoudexiao/article/details/80424567