鱼C论坛

 找回密码
 立即注册
查看: 2892|回复: 3

[技术交流] 顺序栈(滞前)

[复制链接]
发表于 2017-12-23 14:58:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 qq1242009750 于 2017-12-23 15:09 编辑

                                                                            
顺序栈(滞前)

在23到28讲中鱼哥给我们讲了滞后的循序栈,现在我们来说说滞前栈。
什么是滞后、滞前栈呢? 其实就是入栈的时候栈顶指针的位置,如果入栈时栈顶指针指向前一个元素,那么就是滞前栈。
如果入栈后栈顶指针指向后一个元素,那么就是滞后栈。

结构的定义:
       
  1.         struct Stack
  2.         {
  3.                 int *base;
  4.                 int index;
  5.                 int StackSize;
  6.         };

  7.         class CStack
  8.         {
  9.         private:
  10.                 Stack stack;
  11.         public:
  12.                 CStack();
  13.                 ~CStack();

  14.                 void Push(int e);
  15.                 void Pop(int *e);
  16.         };
复制代码

那滞前栈和滞后栈有什么不同呢? 其实都是一样的,只是出入栈的操作不同下面给出滞前栈代码
  1. CStack::CStack()
  2. {
  3.         //初始化
  4.         stack.index = -1;
  5.         stack.base = new int[STACK_INIT_SIZE];
  6.         stack.StackSize = STACK_INIT_SIZE;
  7. }


  8. CStack::~CStack()
  9. {
  10.         delete stack.base;
  11. }


  12. void CStack::Pop(int *e)
  13. {
  14.         if (&stack.base[stack.index] - stack.base + 1 == 0)
  15.         {
  16.                 cout << "栈空!" << endl;
  17.                 return;
  18.         }

  19.         *e = stack.base[stack.index];
  20.         --stack.index;
  21. }


  22. void CStack::Push(int e)
  23. {
  24.         if (&stack.base[stack.index] - stack.base + 1 == stack.StackSize)
  25.         {
  26.                 //扩容
  27.                 int *tmp = stack.base;
  28.                 stack.base = new int[stack.StackSize + INCREMENT];
  29.                 memcpy(tmp, stack.base, stack.StackSize);
  30.                 stack.StackSize += INCREMENT;
  31.                 delete tmp;
  32.         }

  33.         stack.index++;
  34.         stack.base[stack.index] = e;
  35. }
复制代码


可以看出滞前栈 入栈时先自增栈顶指针,后放入数值 ,而出时先去出数值后自减栈顶指针。那么栈元素的计算公式为: top - base + 1
滞后栈.png
滞前栈.png

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
小甲鱼 + 5 + 5 + 3 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-12-23 15:03:26 | 显示全部楼层
支持并且鼓舞!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-12-23 15:06:34 | 显示全部楼层

谢谢 鱼哥的支持
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-8-9 22:11:18 | 显示全部楼层
涨知识了,很有用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-23 21:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表