下面的小程序完成你的要求,希望对你有帮助
#include <iostream>
using namespace std;
// 定义栈容量大小
#define MAX_LVL 100
// 定义一个栈类,用于缓存输入的整数
class stack
{
int m_stack[MAX_LVL]; //栈缓冲区
int m_index; //栈顶序号
public:
stack();
bool push(int number);//入栈
bool pop(int &number);//出栈
};
stack::stack()
{
m_index = 0;
memset(m_stack, 0, sizeof(m_stack));
}
bool stack::push(int number)
{
if (m_index >= MAX_LVL)
{
cout << "stack is overflow\n";
return false;
}
m_stack[m_index++] = number;
return true;
}
bool stack::pop(int &number)
{
if (m_index <= 0)
{
cout << "stack is underflow\n";
return false;
}
number = m_stack[--m_index];
return true;
}
// 输入整数,如果为正则入栈,如果为负表示输入结束
// 入栈和出栈 *** 作都会自动判断栈是否溢出的
void main()
{
int iNumber;
bool bFlag;
stack ob_stack;
do
{
bFlag = false;
cin >> iNumber;
if (iNumber >= 0)
{
bFlag = ob_stackpush(iNumber);
}
}while(iNumber >= 0 && bFlag);
bFlag = true;
while(bFlag)
{
bFlag = ob_stackpop(iNumber);
if (bFlag)
{
cout << iNumber << endl;
}
}
}
#include <stdioh>
#define DATATYPE2 char
#define MAXSIZE 100
typedef struct //定义堆栈结构
{char data[100];
int top;
}SEQSTACK;
void initstack(SEQSTACK s)//初始化堆栈
{
s->top=0;
}
int empty(SEQSTACK s)//判断堆栈是否为空
{
if(s->top==0)
return 1;
else
return 0;
}
int push(SEQSTACK s,DATATYPE2 x)//将x压入堆栈s
{
if(s->top==MAXSIZE-1) //如果堆栈满,则显示overflow
{printf(" overflow\n");
return 0;}
else
{s->top++;
(s->data)[s->top]=x;
return 1;}
}
DATATYPE2 pop(SEQSTACK s)//d出堆栈s的顶层元素
{
DATATYPE2 x;
if(empty(s))
{printf("underflow\n");//如果堆栈为空,则显示underflow
x=NULL;}
else
{x=(s->data)[s->top];
s->top--;}
return x;
}
main()
{
SEQSTACK s,p;
char x,y;
p=&s;
initstack(p);//初始化堆栈
x='c';y='k';
push(p,x);push(p,'a');push(p,y);//将'c','a','k'依次压入堆栈
x=pop(p);//d出最顶层元素'k'给x,此时堆栈中有两个元素'a','c'
push(p,'t');push(p,x);//将't','k'依次压入堆栈
x=pop(p);//d出最顶层元素'k'给x,此时堆栈中有三个元素't','a','c'
push(p,'s');//将's'压入堆栈,此时堆栈中有4个元素's','t','a','c'
while(!empty(p))//将堆栈中的所有元素依次d出
{y=pop(p);
printf("%c",y);}
printf("%c",x);//显示'k'
} //最后在屏幕上输出stack
定义堆栈段的时候,比较特殊,如果在后面加上 stack 指明定义堆栈段,就自动对ss,sp进行了赋值------否则只是一个普通的段,如果要使用它,就需要在代码中对ss,sp赋值。
这个需要看编译环境,用masm for windows这个软件时,可以不加。但是如果用debug运行时,可能会出错,提示没有定义堆栈段。
汇编语言编程不一定要定义栈,此时编译程序会缺省给你的程序分配栈,比如com格式的内存印像文件就是如此。
程序运行中都会用到栈,栈是系统最基本的数据结构,在中断、调用子程序或函数时一定会用到栈,所以程序都会有自己的栈!
以上就是关于求C++编译关于栈的一个小程序全部的内容,包括:求C++编译关于栈的一个小程序、C语言,关于栈的问题 给下面的程序加上注释,并给出运行结果:、汇编语言中,为什么定义堆栈段的时候后面要多加一个stack 如:stack segment s等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)