栈和队列--算法设计题3.15
假设以顺序存储结构实现一个双向栈,即在一维数组的存储空间中存在着两个栈,它们的栈底分别设在数组的两个端点。试编写实现这个双向栈tws的三个操作:初始化inistack(tws)、入栈push(tws,i,x)和出栈pop(tws,i)的算法,其中i为0或1,用以分别指示设在数组两端的两个栈.
C code:
#include<stdio.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相关推荐
- 算法设计题3.16-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
习题集完整源码部分 第3章 栈和队列 ...
- 算法设计题3.27-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
习题集完整源码部分 第3章 栈和队列 ...
- 用栈、回溯算法设计迷宫程序
目录 1.走迷宫与回溯算法 2.迷宫设计栈扮演的角色 3.Python实现走迷宫 栈的应用有许多,本篇博文着重将栈与回溯(Backtracking)算法结合,设计走迷宫程序.其实回溯算法也是人工智能的 ...
- C语言【数据结构】栈和队列【OJ题(C++)、选择题】
目录 一.OJ题 1.225. 用队列实现栈 2.232. 用栈实现队列 3.622. 设计循环队列 4.20. 有效的括号 二.选择题 1.下列关于栈的叙述正确的是(B) 2.一个栈的入栈序列为AB ...
- c语言数据结构算法设计题,数据结构题集(C语言版)算法设计题答案[].doc
数据结构题集(C语言版)算法设计题答案[].doc 第一章 绪论 1.16 void print_descending(int x,int y,int z)// 按从大到小顺序输出三个数 { scan ...
- 栈和队列常见oj题(括号匹配问题、栈实现队列、队列实现栈、设计循环队列)
一.括号匹配问题 1.题目要求: 2.大体思路 遍历这个字符串,如果是左括号就让它入栈,如果是右括号就让它和栈顶元素进行匹配(前提是栈中有元素),匹配成功的话就让栈顶元素出栈,匹配失败就返回false ...
- 栈和队列---算法题目
1.设计一个有getMin功能的栈 1.解题思路 方案一: push:将每次插入的新值和stackMin的栈顶元素比较,如果新值较小就插入到stackMin,否则什么也不干 pop:stackData ...
- 数据结构算法设计题 (超详细)
整理日期:2022-12-08 目录 一.线性表 二.栈和队列 三.数组和广义表 四.树和二叉树 五.图 六.查找算法 七.排序算法 一.线性表 (1)将两个递增的有序链表合并为一个递增的有序链表.要 ...
- 【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 ...
最新文章
- (EM算法)The EM Algorithm
- python pandas csv时间聚合_Python通过pandas操作excel常用功能
- 网易云信联手神州信息,金融视频营业厅被央视点赞
- Intent打开各种类型的文件
- XCTF-MISC-新手区-gif
- JTA的含义及应用简介
- ansible 配置文件
- java运行时异常与一般异常有何异同_JVM | 虚拟机运行时数据区域划分和使用详解...
- php 写一个大富翁游戏,抽奖系列:如何用纯js做一个大富翁游戏
- CSS:position属性和z_index
- nginx 超时设置_Nginx最详细的反向代理配置步骤,拿去不谢
- 四川大学计算机绘图cad网站,计算机绘图: Auto CAD版
- IE常见bug及其修复方法
- 酷狗社招面试 java_前端面试社招经验(网易,酷狗)
- MATLAB 图像识别
- 最大化 LoRa 长距离,秘籍2:接收灵敏度
- 宇视各类产品默认地址列表
- 码农翻身之大话编程篇:8 TCP/IP之蓟辽督师
- matlab 定义函数 调用,matlab 定义函数,matlab定义函数并调用
- InnoSetup的简繁体中文语言文件ChineseSimplified.isl和ChineseTraditional.isl