求C++编译关于栈的一个小程序

求C++编译关于栈的一个小程序,第1张

下面的小程序完成你的要求,希望对你有帮助

#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等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9702680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存