码迷,mamicode.com
首页 > 其他好文 > 详细

计算机基础数据结构讲解第八篇-栈

时间:2020-09-17 17:51:55      阅读:21      评论:0      收藏:0      [点我收藏+]

标签:next   设置   注意   出栈   知识   线性   ack   避免   介绍   

??本章我们介绍有关栈的知识,栈的重点在于顺序存储,链式存储及其特点。

1.栈的基本概念

(1)栈的定义

??栈是只允许在一端进行插入和删除的线性表。有一个栈顶和栈底。栈顶是允许插入和删除的那一端,栈底是不允许插入和删除的那一端。如果一个栈不包括任何元素,就是一个空表也就是空栈。
??栈的特点是先进先出。

(2)栈的基本操作

??栈的基本操作包括下面六种:
??InitStack(&S):初始化一个空栈S。
??StackEmpty(S):判断一个栈是否为空。
??Push(&S,x):进栈,若栈未满,则将x加入使其成为新栈顶。
??Pop(&S,&x):出栈,若栈非空,则弹出栈顶元素,并用x返回。
??GetTop(S,&x):得到栈顶元素,若栈S非空,则用x返回栈顶元素。
??DestoryStack(&S):销毁栈,并释放栈S占用的存储空间("&"表示引用调用)。

2.栈的顺序存储结构

??栈是一种特殊的线性表,有两种存储方式,这里先介绍顺序存储结构。

(1)顺序栈的实现

??采用顺序存储的栈叫做顺序栈,它用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针top指示当前栈顶元素的位置。
??栈的顺序存储类型定义为:

#define MaxSize 50              //定义栈中元素的最大个数
typedef struct{
  ElemType data[MaxSize];       //存放栈中的元素
  int top;                      //栈顶指针
}SqStack

??要注意的是,初始时把栈顶指针S.top(S是SqStack的简化)设置为-1或者0,栈顶元素为S.data[S.top]。
??进栈的时候,栈如果不满,则先把栈顶指针加1,再把值送到栈顶元素位置。出栈的时候,栈如果非空,先取栈顶元素值,再将栈顶元素减1.
??如果初始时把栈顶指针S.top设置为-1,则判断栈空的条件是S.top-1,栈满的条件为S.topMaxSize-1,栈长是S.top+1。
??由于入栈操作受到数组大小的限制,当对栈的最大使用空间估计不足的时候,有可能发生栈上溢,此时应该及时处理,避免出错。

(2)顺序栈的基本运算

??初始化顺序栈

void InitStack(SqStack &S){
  S.top = -1;
}

??栈空的判断

bool StackEmpty(SqStack S){
  if(S.top == -1)
    return true;
  else
    return false;
}

??进栈

bool Push(SqStack &S,ElemType x){
  if(S.top == MaxSize - 1)
    return false;
  S.data[++S.top] = x;
  return true;
}

??出栈

bool Pop(SqStack &S,ElemType &x){
  if(S.top == -1)
    return false;
  x = S.data[S.top--];
  return true;
}

??读栈顶元素

bool GetTop(SqStack S,ElemType &x){
  if(S.top == -1)
    return false;
  x = S.data[S.top];
  return true;
}

(3)顺序栈的注意事项
??前面的顺序栈的操作是在顺序栈的栈顶指针S.top设置为-1时的算法。如果把S.top设置为0,即top指向栈顶元素的下一个位置,则入栈操作变为S.data[S.top++] = x;出栈操作变为x = S.data[--S.top],对应的栈空条件变为S.top = 0,栈满条件为S.top = MaxSize。

3.栈的链式存储结构

??采用链式存储的栈称为链栈,优点是便于多个栈共享存储空间和提高其效率,且不存在栈满上溢的情况。通常采用单链表实现,规定所有操作在单链表的表头进行,相当于栈顶。这里设定链栈没有头结点,Lhead头指针直接指向栈顶元素。站的链式存储类型为:

typedef struct Linknode{
  ElemType data;
  struct Linknode *next;
}*LiStack;

计算机基础数据结构讲解第八篇-栈

标签:next   设置   注意   出栈   知识   线性   ack   避免   介绍   

原文地址:https://www.cnblogs.com/ITXiaoAng/p/13629416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!