1.存储结构

    

 
  
  1. typedef struct 
  2. {  
  3.    elementtype data[maxsize];  
  4.    int top;  
  5. }seqstack; 

2.顺序栈上运算的实现

  • 初始化栈:初始化栈就是将栈设置为空,即将其元素个数设为0。由于顺序栈中没有设置元素个数这个分量,只有栈顶指针top,而top所指向的元素下标比其个数少1,因此,设置栈为空可通过将top设为-1来实现。

 

 
  
  1. void init_stack(seqstack * &s)  
  2. {s->top=-1;} 
  • 判断栈是否为空:就是要判断top的值是否为-1。

 

 
  
  1. BOOL stack_empty(seqstack s)  
  2. {if(s.top==-1)return TRUE;  
  3.   esle  return FALSE;  
  • 取栈顶元素:若栈不为空,返回栈顶元素的指,否则返回出错信息。较为通用的方法是将返回的元素以参数的方式给出。

 

 
  
  1. void stack_top(seqstack *s,elementtype &x)  
  2. {  
  3. if(stack_empty)error("栈为空");  
  4. else x=s->data[s->top];  
  • 入栈:插入前首先要判断是否栈已满,否则不能插入。

 

 
  
  1. void push_stack(seqstack *s,elementtype x)  
  2. {  
  3.   if(s->top==maxsize-1)error("溢出");  
  4.   else s->data[++s->top]=x;  
  • 出栈:由于有了取栈顶元素的函数,故可将出栈运算简单设置成不返回结果的函数形式,也可设置为带结果的函数形式。

 

 
  
  1. void pop_stack(seqstack *s,elementtype &x)  
  2. {  
  3.   if(stack_empty(*s))error("栈空,不能删除");  
  4.   else x=s->data[s->top--];  
  • 判断栈是否已满:与判断栈空的函数形式类似。

 

 
  
  1. BOOL stack_full(seqstack s)  
  2. {  
  3.   if(s.top==maxsize-1)return TRUE ;  
  4.   else return FALSE;