关于栈的复习总结

知识图谱

这里写图片描述

1.顺序存储

顺序栈内容包含数据和栈顶指针(int),因此采用结构体。

typedef char ElemType;//定义char型,下文中ElemType都代表char
typedef MaxSize 50;//定义栈中最大数据个数为50
typedef struct{
  ElemType data[MaxSize];//栈中元素
  int top;//栈顶指针
}SqStack;

这里写图片描述
注意:
(1)初始时,top指向-1
(2)入栈时,先判断顺序栈是否已满(判断条件:top=maxsize-1);如果没满,则top++,并将元素值赋给s.top;
(3)出栈时,先判断顺序栈是否已空(判断条件:top=-1);如果没空,则先返回栈顶元素,再top- -。

A初始化
void InitStack(SqStack &S)
{
  S.top=-1;
}
B入栈
bool Push(SqStack &S,Elemtype x)
{
   if(S.top==MaxSize-1)//栈满条件
       return false;
    else
       S.top++;//栈顶指针自加
       S.data[S.top]=x;//x入栈,放在栈顶
       return true;
}
C出栈
bool Pop(SqStack &S,Elemtype &x)
{
   if(S.top==-1)//栈空条件
     return false;
   else
     x=S.data[S.top];//取出栈顶元素
     S.top--;//栈顶指针自减
     return true;
}
D判空
bool StackEmpty(SqStack S)
{
  if(S.top==-1)
     return true;
  else
     return false;
}
E读栈顶元素
bool GetTop(SqStack S,Elemtype &x)
{
  if(S.top==-1)//栈空
     return false;
  else
     x=S.data[S.top];//取出栈顶元素
     return true;
}

拓展:共享栈

两个顺序栈共享一个一维数组空间,而栈底位置相对不变,两个栈底分别设为一维数组的两端。如图:

这里写图片描述

note:
(1)栈空:top1==-1&&top2==maxsize;
(2)栈满:top2-top1= 1(此时两个栈顶指针相邻);
(3)入栈:S.data[++top1]=x或S.data[–top2]=x;
(4)出栈:x=S.data[top1–]或x=S.data[top2++];
(5)共享栈可以更好的利用存储空间,整个存储空间被占满时发生上溢。

2.链式存储

优点:不存在栈满上溢情况。
通常用单链表实现。
链栈无头节点,有头指针Lhead,指向栈顶元素。
插入与删除操作均在表头进行。

如图:

这里写图片描述

typedef struct LinkNode{
  Elemtype data;
  struct LinkNode *next;
}LinkStack;

关于栈的遗留问题见:https://blog.csdn.net/pilgrim_121/article/details/88552824

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值