前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >线性表--多栈共享技术(十)

线性表--多栈共享技术(十)

作者头像
花狗Fdog
发布2020-10-28 09:52:51
3210
发布2020-10-28 09:52:51
举报
文章被收录于专栏:花狗在Qt花狗在Qt

一.介绍

栈的应用非常广泛,经常会出现一个程序中需要同时使用多个栈的情况。若使用顺序栈,会因为对栈空间大小难以准确估计,从而产生有的栈溢出、有的栈空间还很空闲的情况。为了解决这个问题,可以让多个栈共享一个足够大的数组空间,通过利用栈的动态特性来使其存储空间互相补充,这就是多栈的共享技术。在顺序栈的共享技术中,最常用的是两个栈的共享技术,名双端栈。

1.图示

在这里插入图片描述
在这里插入图片描述

栈1和栈2添加元素时,都会向数据中间靠拢,当栈1的指针+1等于栈2的指针的时候,栈满。

2.代码实现

(1) 定义双端栈

代码语言:javascript
复制
#define M 100
typedef struct
{
 int elem[M];
 char top[2]; //top[0]和top[1]分别作为两个栈顶的指示器
}DqStack;

(2) 初始化

代码语言:javascript
复制
void InitStck(DqStack * S)
{
 
 S->top[0] = -1;
 S->top[1] = M;
}

(3) 进栈

代码语言:javascript
复制
int Push(DqStack * S, int x,int i)
{
 if (S->top[0] + 1 == S->top[1])return(false);
 switch (i)
 {
 case 0:
  S->top[0]++;
  S->elem[S->top[0]] = x;
  break;
 case 1:
  S->top[1]++;
  S->elem[S->top[1]] = x;
  break;
 default:
  return (false);
 }
 return(true);
}

(4) 出栈

代码语言:javascript
复制
int Pop(DqStack * S, int *x,int i)
{
 switch (i)
 {
 case 0:
  if (S->top[0] == -1)return(false);
  *x = S->elem[S->top[0]];
  S->top[0]--;
  break;
 case 1:
  if (S->top[1] == M)return(false);
  *x = S->elem[S->top[1]];
  S->top[1]--;
  break;
 default:
  return (false);
 }
 return (true);
}

若有错误,欢迎指正批评,欢迎讨论。 每文一句:做事有两种境界。一种是功利的境界,事情及相关的利益是唯一的目的,于是做事时必须会充满焦虑和算计。另一种是道德的境界,无论做什么事,都把精神上的收获看得更重要,做事只是灵魂修炼和完善的手段,真正的目的是做人。正因为如此,做事时反而有了一种从容的心态和博大的气象。做事即做人。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一.介绍
  • 1.图示
  • 2.代码实现
    • (1) 定义双端栈
      • (2) 初始化
        • (3) 进栈
          • (4) 出栈
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档