1类定义最后一定要加分号的!2int Stack ::pop()定义最后多了分号!
------------------------------------------------------------------------------------------------------
最后虽然运行成功,但是是有问题的!按你的定义,栈为空时tos=0;但你却把第一个入栈的赋给了stck[0]了,而应该是赋给stck[1]的!!!!
----------------------------------------------------------------------------------------------------
1既然是C++,建议把# include <iostreamh>改为:
#include<iostream>
using namespace std;
否则,在高版本,例如,我在vs2010运行会编译错误的
2既然用数组,建议把tos初始值改为-1,而不是0,这样10个元素就是stck[0]到stck[9]了。
3void Stack ::push(int m)中的
stck[tos]=m;tos++;
写反了!!应倒过来。
这样的话,而int Stack ::pop()也写反了;但若改成:
return stck[tos];tos--;
又有问题,因为根本不会执行tos--;语句;那怎么办??我们可以赋给一个临时变量:
int temp;temp=stck[tos];
tos--;
return temp;
4"如果栈溢出,程序终止。"并没有实现!!建议把int Stack ::pop()中的return;改为exit(1);包括判断栈为空里也应该写成exit(1);
5建议把栈初始实现在类的构造函数里,而不是在init()里。
6建议不要把没形参的函数直接(),可以(void);
7建议把void main(){}形式改为int main(){return 0;}形式
# include <iostream>using namespace std;
const int SIZE=10;
class Stack{
int stck[SIZE];
int tos;
public:
Stack(void);
void push(int m);
int pop(void);};
Stack ::Stack(void)
{ tos=-1; }
void Stack ::push(int m)
{
if(tos==SIZE-1)
{
cout<<"stack is full\n";
exit(1);
}
tos++; //倒过来!!
stck[tos]=m;
}
int Stack ::pop(void)
{
if(tos==-1)
{
cout<<"stack is empty\n";
exit(1);
}
int temp; //用变量temp临时存储stck[tos]的值!
temp=stck[tos];
tos--;
return temp;
}
int main()
{
int i;
Stack a;
apush(10);
apush(12);
apush(14);
for (i=0;i<3;i++)
cout<<apop()<<"\n";
return 0;
}
其实这些基础的东西网上有不少,
你可以多去csdn,那里可以学到不少好东西
,我就直接给你粘贴过来了
java中堆栈(stack)和堆(heap)
一、堆栈(stack)和堆(heap)?
按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的
静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求
栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所需的数据区大小才能够为其分配内存和我们在数据结构所熟知的栈一样,栈式存储分配按照先进后出的原则进行分配。
静态存储分配要求在编译时能知道所有变量的存储要求,栈式存储分配要求在过程的入口处必须知道所有的存储要求,而堆式存储分配则专门负责在编译时或运行时模块入口处都无法确定存储要求的数据结构的内存分配,比如可变长度串和对象实例堆由大片的可利用块或空闲块组成,堆中的内存可以按照任意顺序分配和释放
(2)堆和栈的比较
上面的定义从编译原理的教材中总结而来,除静态存储分配之外,都显得很呆板和难以理解,下面撇开静态存储分配,集中比较堆和栈:
从堆和栈的功能和作用来通俗的比较,堆主要用来存放对象的,栈主要是用来执行程序的而这种不同又主要是由于堆和栈的特点决定的:
在编程中,例如C/C++中,所有的方法调用都是通过栈来进行的,所有的局部变量,形式参数都是从栈中分配内存空间的。实际上也不是什么分配,只是从栈顶向上用就行,就好像工厂中的传送带(conveyor
belt)一样,Stack
Pointer会自动指引你到放东西的位置,你所要做的只是把东西放下来就行退出函数的时候,修改栈指针就可以把栈中的内容销毁这样的模式速度最快,当然要用来运行程序了需要注意的是,在分配的时候,比如为一个即将要调用的程序模块分配数据区时,应事先知道这个数据区的大小,也就说是虽然分配是在程序运行时进行的,但是分配的大小多少是确定的,不变的,而这个"大小多少"是在编译时确定的,不是在运行时
堆是应用程序在运行的时候请求 *** 作系统分配给自己内存,由于从 *** 作系统管理的内存分配,所以在分配和销毁时都要占用时间,因此用堆的效率非常低但是堆的优点在于,编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间,因此,用堆保存数据时会得到更大的灵活性。事实上,面向对象的多态性,堆内存分配是必不可少的,因为多态变量所需的存储空间只有在运行时创建了对象之后才能确定在C++中,要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!这也正是导致我们刚才所说的效率低的原因,看来列宁同志说的好,人的优点往往也是人的缺点,人的缺点往往也是人的优点(晕~)
(3)JVM中的堆和栈
JVM是基于堆栈的虚拟机JVM为每个新创建的线程都分配一个堆栈也就是说,对于一个Java程序来说,它的运行就是通过对堆栈的 *** 作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种 *** 作:以帧为单位的压栈和出栈 *** 作。
我们知道,某个线程正在执行的方法称为此线程的当前方法我们可能不知道,当前方法使用的帧称为当前帧。当线程激活一个Java方法,JVM就会在线程的Java堆栈里新压入一个帧。这个帧自然成为了当前帧在此方法执行期间,这个帧将用来保存参数,局部变量,中间计算过程和其他数据这个帧在这里和编译原理中的活动纪录的概念是差不多的
从Java的这种分配机制来看,堆栈又可以这样理解:堆栈(Stack)是 *** 作系统在建立某个进程时或者线程(在支持多线程的 *** 作系统中是线程)为这个线程建立的存储区域,该区域具有先进后出的特性。
每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆。应用程序在运行中所创建的所有类实例或数组都放在这个堆中,并由应用所有的线程共享跟C/C++不同,Java中分配堆内存是自动初始化的。Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。
1、就
第一个问题
来说,这个参数主要是为管理员提供需长时间CLI调试时所用的,设计的时候出于安全的考虑,限定了此超时参数只能在当前连接中有效,且不在防火墙配置中存储;
2、关于修改、删除
CC攻击
的配置信息,会导致防火墙死机的问题,不知道是不是每次修改、删除配置都会导致这样的结果呢?而且关于死机最终的确认手段是通过判断能否串口登陆来确定的,若
可以的话
,请您通过串口判断一下,可以通过串口看看在修改、删除配置的时候串口里系统是否有所报错提示?
3、关于IP+MAC绑定问题,首先“网络管理--二层网络--ARP--定义主机”中,是可以直接实现IP+MAC绑定功能,除非已经有了相同或类似的配置存在而导致该功能配置错误,请检查;
在我们V33版本中对防火墙菜单的布局进行了较大的调整,考虑到IP+MAC绑定也是
安全策略
的一种,将该功能分离出来主要是为了功能布局上的考虑;
4、关于防火墙运行一段时间重启的问题,首先还是需要通过串口检查一下系统是否还能够登陆,从而排除假死的情况,然后在发现内存使用率异常的情况下,在命令行里执行system
showprocess,看看是哪个进程占用了过多的内存,并将打印结果贴上来给我们看看,同时将防火墙的调试
信息获取
下来给我们便于问题分析;最后,可以的话,请将防火墙
配置文件
以及网络结构图发给我们,便于我们进行模拟测试。
以上就是关于用类实现入栈退栈,麻烦帮改下C++程序~全部的内容,包括:用类实现入栈退栈,麻烦帮改下C++程序~、JAVA堆栈问题、TOS v3.3.001.041.8 使用中的几个问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)