顺序栈

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#include<stdio.h>
#define MAXSIZE 100 //是顺序栈所能存储的最多元素个数
#define TRUE 1
typedef int datatype;
typedef struct//顺序栈的定义 
{
    datatype stack[MAXSIZE]; //stack 数组存储栈中所有的数据元素 
    int top;
 } seqstack;//顺序栈的类型定义 
 seqstack *S;//顺序栈变量定义 
 
 //顺序栈的初始化运算
 void INITSTACK(seqstack *S)
 {
     S->top=-1;//将顺序栈设置为空栈 
  } 
  
  
  //检查顺序栈是否为空栈的运算
   int EMPTY(seqstack *S)
   {
       if(S->top<0)return (TRUE);//若顺序栈为空,函数返回1 
       else return (NULL);//若顺序栈不为空,函数返回0 
   }
   
   //向顺序栈中插入元素的运算 
   seqstack *PUSH(seqstack *S,datatype x)
   {
       if(S->top>=MAXSIZE-1)//检查顺序栈是否为满栈 
       {
           printf("栈满溢出错误!");    
           return (NULL); //若为满栈 终止程序 
    }
    else
    {
            S->top++;//将栈顶指针加1,使之指向新结点 
            S->stack[S->top]=x;
    }
    return (S);
   }
   
   //从顺序栈中删除栈顶元素的运算
   datatype POP(seqstack *S)
   {datatype x;
       if(S->top<0)//注意是top<0; 
       {    
           printf("栈空出错误!");
           return (NULL);
       }
       else
       {
           x=S->stack[S->top];
           S->top--;
           return (x);
       }
       
    } 
    //顺序栈取栈顶元素的运算
    datatype gettop_seqstack(seqstack *S)
    {
        if(EMPTY(S))
        {
            printf("栈是空栈!");
            return (NULL);
        }
        else 
        return(S->stack[S->top])
     }