假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈tws的三个操作:初始化inistack(tws)、入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈.

C  code:

#include<stdio.h>

#include<stdlib.h>
#define OK 1
#define OVERFLOW -1
#define ERROR 1
typedef int Status;

typedef struct
{
 int *base[2];
 int *top[2];
}BDStack;

Status InitStack(BDStack &s,int m)
{
  s.base[0]=(int*)malloc(m*sizeof(int));
  s.base[1]=s.base[0]+m;
  s.top[0]=s.base[0];
  s.top[1]=s.base[1];
  return OK;
}

Status push(BDStack &s,int i,int x)
{
     if(s.top[0]>s.top[1]) return OVERFLOW;
     if(i==0)  *s.top[0]++=x;
     else if(i==1) *s.top[1]--=x;
     else return ERROR;
     return OK;
}

Status pop(BDStack &s,int i,int x)
{
     if(i==0)
     {
          if(s.top[0]==s.base[0]) return OVERFLOW;
          x=*--s.top[0];
        }
        else if(i==1)
        {
             if(s.top[1]==s.base[1]) return OVERFLOW;
             x=*++s.top[1];
        }
     else return ERROR;
     return OK;
}

void PrintfStack(BDStack &s)
{
     while(s.base[0]<=s.top[0])
     {
          printf("%d ",*s.top[0]);
          s.top[0]--;
        }
        while(s.top[1]<=s.base[1])
        {
             printf("%d ",*s.top[1]);
             s.top[1]++;
        }
}

int main()
{
     int m,i;
     BDStack s;
     printf("please input the length of the stack: ");
     scanf("%d",&m);
     InitStack(s,m);
     for(i=0; i<(m-2)/2; i++)
     {
          push(s,0,i);
     }
     for(i=0; i<(m-2)/2 ; i++)
     {
          push(s,1,i);
        }
        s.top[0]--;
     s.top[1]++;
        PrintfStack(s);
        return 0;
}

转载于:https://www.cnblogs.com/iwuyudong/archive/2011/05/05/2234050.html

栈和队列--算法设计题3.15相关推荐

  1. 算法设计题3.16-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版

    习题集完整源码部分 第3章  栈和队列                                                                                 ...

  2. 算法设计题3.27-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版

    习题集完整源码部分 第3章  栈和队列                                                                                 ...

  3. 用栈、回溯算法设计迷宫程序

    目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...

  4. C语言【数据结构】栈和队列【OJ题(C++)、选择题】

    目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...

  5. c语言数据结构算法设计题,数据结构题集(C语言版)算法设计题答案[].doc

    数据结构题集(C语言版)算法设计题答案[].doc 第一章 绪论 1.16 void print_descending(int x,int y,int z)// 按从大到小顺序输出三个数 { scan ...

  6. 栈和队列常见oj题(括号匹配问题、栈实现队列、队列实现栈、设计循环队列)

    一.括号匹配问题 1.题目要求: 2.大体思路 遍历这个字符串,如果是左括号就让它入栈,如果是右括号就让它和栈顶元素进行匹配(前提是栈中有元素),匹配成功的话就让栈顶元素出栈,匹配失败就返回false ...

  7. 栈和队列---算法题目

    1.设计一个有getMin功能的栈 1.解题思路 方案一: push:将每次插入的新值和stackMin的栈顶元素比较,如果新值较小就插入到stackMin,否则什么也不干 pop:stackData ...

  8. 数据结构算法设计题 (超详细)

    整理日期:2022-12-08 目录 一.线性表 二.栈和队列 三.数组和广义表 四.树和二叉树 五.图 六.查找算法 七.排序算法 一.线性表 (1)将两个递增的有序链表合并为一个递增的有序链表.要 ...

  9. 【HDU - 1702 】ACboy needs your help again! (栈和队列,水题模拟)

    题干: ACboy was kidnapped!!  he miss his mother very much and is very scare now.You can't image how da ...

最新文章

  1. (EM算法)The EM Algorithm
  2. python pandas csv时间聚合_Python通过pandas操作excel常用功能
  3. 网易云信联手神州信息,金融视频营业厅被央视点赞
  4. Intent打开各种类型的文件
  5. XCTF-MISC-新手区-gif
  6. JTA的含义及应用简介
  7. ansible 配置文件
  8. java运行时异常与一般异常有何异同_JVM | 虚拟机运行时数据区域划分和使用详解...
  9. php 写一个大富翁游戏,抽奖系列:如何用纯js做一个大富翁游戏
  10. CSS:position属性和z_index
  11. nginx 超时设置_Nginx最详细的反向代理配置步骤,拿去不谢
  12. 四川大学计算机绘图cad网站,计算机绘图: Auto CAD版
  13. IE常见bug及其修复方法
  14. 酷狗社招面试 java_前端面试社招经验(网易,酷狗)
  15. MATLAB 图像识别
  16. 最大化 LoRa 长距离,秘籍2:接收灵敏度
  17. 宇视各类产品默认地址列表
  18. 码农翻身之大话编程篇:8 TCP/IP之蓟辽督师
  19. matlab 定义函数 调用,matlab 定义函数,matlab定义函数并调用
  20. InnoSetup的简繁体中文语言文件ChineseSimplified.isl和ChineseTraditional.isl

热门文章

  1. FckEditor-未能映射路径/UserFiles/image/
  2. 编程珠玑第七章 粗略估算
  3. 虚拟机下Linux安装图解之三:Linux发行版本之Red Hat 9 安装
  4. 图像转文字(分类识别等),文字转图片,实际需要的过程
  5. 数据集神经网络共同进步
  6. 利用Python实现推流直播详解
  7. 某个第三方支付平台数据库的分析、学习与总结(转)
  8. 调用天气预报Web Service
  9. java ASM 分析类
  10. 【树莓派】【转载】基于树莓派,制作家庭媒体中心+下载机