栈原理及实现

1.栈的定义  

      栈(Stack)是限制仅在表的一端进行插入和删除运算的线性表。  

    (1)通常称插入、删除的这一端为栈顶 (Top),另一端称为栈底 (Bottom)。  

    (2)当表中没有元素时称为空栈。  

    (3)栈为后进先出(Last In First Out)的线性表,简称为 LIFO 表。  

     * 栈的修改是按后进先出的原则进行。每次删除(退栈)的总是当前栈中最新"的元素,即最后插入(进栈)的元素,而最先插入的是被放在栈的底部, 要到最后才能删除。

2.图示

栈原理及实现
3.栈的常见操作及实现代码
1,初始化
实现思路:用指定大小的
length实例化一个SeqStack<T>,然后使top指针指向-1
2,进栈
实现思路:将
top指针加1,然后将新结点插入到top指针指向的位置。
3,出栈
实现思路:消灭
top指向的结点,并使top指针减1
4,获取栈顶元素
实现思路:与出栈相似,只是不改变栈的状态而已。
5,判断是否栈空
实现思路:如果
top指针是否等于-1,如果是则返为空栈。
6,判断是否栈满
实现思路:检查
top指针的值是否等于数组的长度,如果是则为栈满。

#define MAXSIZE<栈最大元素数>
typedef struct
{  datatype data [MAXSIZE];
  int top;
}SeqStack;
SeqStack*Init_SeqStack()
{  SeqStack *s;
  s = malloc( sizeof(SeqStach) );
  s - > top = -1;
  return s;
}
int Empty_SeqStack(SeqStack *s)
{
  return (s->top == -1 ? 1 : 0 );
}
int Full_SeqStack( SeqStack *s)
{
  return (s->top == MAXSIZE - 1 ? 1 : 0 );
}
int Push_SeqStack ( SeqStack*s, datatype x)
{
  if ( ! Full_SeqStack( s) )
  return 0;     // 栈满不能入栈
  s-> data [ ++ s-> top ]= x ;
  return 1 ;
}
int Pop_SeqStack ( SeqStack*s, datatype *x)
{
  if( ! Empty_SeqStack(s) )
  return 0 ;          //栈空不能再出栈
  *x = s -> data [ s -> top -- ] ;
  return 1;
}
int Top_SeqStack ( SeqStack *s)
{
  if( ! Empty_SeqStack(s) )
  return 0 ;           //栈空无元素
  *x = s -> data [ s -> top ] ;
  return 1;
}