求高手解答下这道程序结构的题——谢谢

3-2 将编号为0和1的两个栈存放于一个数组空间V[m]中,栈底分别处于数组的两端。当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时该栈为空。两个栈均从两端向中间增长。当向第0号栈插入一个新元素时,使top[0]增1得到新的栈顶位置,当向第1号栈插入一个新元素时,使top[1]减1得到新的栈顶位置。当top[0]+1 == top[1]时或top[0] == top[1]-1时,栈空间满,此时不能再向任一栈加入新的元素。试定义这种双栈(Double Stack)结构的类定义,并实现判栈空、判栈满、插入、删除算法。

按要求做题就可以了。就当是考验下高手分掌握的情况哈。呵呵

#include <assert.h>
template <class Type> class DblStack { //双栈的类定义
private:
int top[2], bot[2]; //双栈的栈顶指针和栈底指针
Type *elements; //栈数组
int m; //栈最大可容纳元素个数
public:
DblStack ( int sz =10 ); //初始化双栈, 总体积m的默认值为10
~DblStack ( ) { delete [ ] elements; } //析构函数
void DblPush ( const Type& x, int i ); //把x插入到栈i的栈顶
int DblPop ( int i ); //退掉位于栈i栈顶的元素
Type * DblGetTop ( int i ); //返回栈i栈顶元素的值
int IsEmpty ( int i ) const { return top[i] == bot[i]; } //判栈i空否, 空则返回1, 否则返回0
int IsFull ( ) const { return top[0]+1 == top[1]; } //判栈满否, 满则返回1, 否则返回0
void MakeEmpty ( int i ); //清空栈i的内容
}

template <class Type> DblStack<Type> :: DblStack ( int sz ) : m(sz), top[0] (-1), bot[0](-1), top[1](sz), bot[1](sz) {
//建立一个最大尺寸为sz的空栈, 若分配不成功则错误处理。
elements = new Type[m]; //创建栈的数组空间
assert ( elements != NULL ); //断言: 动态存储分配成功与否
}

template <class Type> void DblStack<Type> :: DblPush ( const Type& x, int i ) {
//如果IsFull ( ),则报错;否则把x插入到栈i的栈顶
assert ( !IsFull ( ) ); //断言: 栈满则出错处理,停止执行
if ( i == 0 ) elements[ ++top[0] ] = x; //栈0情形:栈顶指针先加1, 然后按此地址进栈
else elements[--top[1] ] = x; //栈1情形:栈顶指针先减1, 然后按此地址进栈
}

template <class Type> int DblStack<Type> :: DblPop ( int i ) {
//如果IsEmpty ( i ),则不执行退栈,返回0;否则退掉位于栈i栈顶的元素,返回1
if ( IsEmpty ( i ) ) return 0; //判栈空否, 若栈空则函数返回0
if ( i == 0 ) top[0]--; //栈0情形:栈顶指针减1
else top[1]++; //栈1情形:栈顶指针加1
return 1;
}

template <class Type> Type * DblStack<Type> :: DblGetTop ( int i ) {
//若栈不空则函数返回该栈栈顶元素的地址。
if ( IsEmpty ( int i ) ) return NULL; //判栈i空否, 若栈空则函数返回空指针
return& elements[ top[i] ]; //返回栈顶元素的值
}

template <class Type> void MakeEmpty ( int i ) {
if ( i == 0 ) top[0] = bot[0] = -1;
else top[1] = bot[1] = m;
}
我照着资料一个一个打出来的。
温馨提示:内容为网友见解,仅供参考
无其他回答

求高手解答下这道程序结构的题——谢谢
include <assert.h> template <class Type> class DblStack { \/\/双栈的类定义 private:int top[2], bot[2]; \/\/双栈的栈顶指针和栈底指针 Type *elements; \/\/栈数组 int m; \/\/栈最大可容纳元素个数 public:DblStack ( int sz =10 ); \/\/初始化双栈, 总体积m的默认...

[急求助]C语言程序编程题,请高手帮忙解答下!
按照题目要求编写的程序如下(见图)

求高手帮我解答下面的体系结构选择题
DADDB BDBAB DC

单片机程序分析题求高手解答。。。
MOV A,#60H ;立即数寻址,所以(A)=60H MOV R0;#40H ;(R0)=40H MOV @R0,A ;间接寻址,将寄存器A存的值存入寄存器R0所指地址40H中,(40H)=60H MOV 41H,R0 ;直接寻址,将R0的值存入41H单元,(41H)=40H

...题,我怎么看都应该是2的9次方,但答案是1024为什么,求c高手解答...
应该是2的10次方。简单说,假设n=2,程序第一遍,k=1,m=2;第二遍,k=2,m=2×2;第三遍,k=3(此时不满足<=n)的条件了,因此结果是m=2×2。以此类推,n=10,m=2^10.

c语言程序设计题*a^=*b; *b^=*a; *a^=*b;这是一个将a,b交换的语句,但...
这是位操作符异或, 二进制的数学运算。这是一种不需要临时变量就可以交换ab的方法 你去看一下位操作

C++编程的问题,求高手解答一下 一、题目:数据统计、平均值、方差 二...
p[z]=(1.0\/n*(pow(k[z],2)));这里是1.0,不然直接用1除的话,小数全部都会转变成0,就得不到答案了还有最重要一点,数组是从0开始到n-1,不是从1开始到n

计算机题目 跪求高手解答 三
41 c 42 c 43 c 44 不好意思,十年的计算机经验也无法理解出题者的意思 45 A 46 A 47 A 48 B (计算机指令集)49 C 50 D 51 D 52 C (这题很无聊,没有实际意义)53 D (同上)54 A (同上)55 B (这题更无聊,少了哪样计算机都无法运行)56 A 57 C 58 A 59 A 60 D...

我遇到一些数据结构的问题,请高手帮忙给解答,跪谢!!!
1, t->next = p->next 2, p=head 3, n-k 4,1

跪求高手解答这道题
跪求高手解答这道题  我来答 2个回答 #话题# 打工人必看的职场『维权』指南!mbcsjs 2016-05-13 · TA获得超过23.3万个赞 知道顶级答主 回答量:7.6万 采纳率:77% 帮助的人:1.6亿 我也去答题访问个人页 关注 展开全部 追问 谢谢兄弟 本回答由提问者推荐 已赞过 已踩过< 你对这个...

相似回答