21.2.2 使用栈内存
由于栈是由系统来管理,所以不会直观地感觉到在使用栈,除非程序自己来模拟一个栈。
【示例21-5】 局部变量自动从栈上获得存储空间。
- void main()
- {
- int a;
- int b;
- int c;
- a = 25;
- b = 68;
- c = a + b;
- std::cout << "the value of a + b is : " << c;
- }
分析:该示例有3个局部变量,都从栈上获得内存空间。每个变量的名字与一个栈上空间相对应。由于栈由系统来管理,所以使用时程序没有特别需要注意的地方。因此使用栈时,只需给出对应的变量名即可。
【示例21-6】 补全了示例21-4,演示了用指针链模拟栈的方法,以说明栈的操作原理。
- class intstack
- {
- public:
- intstack();
- ~intstack();
- private:
- struct tagint
- {
- int x;
- struct tagint *p;
- } *value;
- public:
- void push(int y);
- int pop();
- int gettop();
- }
- intstack::intstack()
- {
- value=(struct tagint *)malloc(sizeof(struct tagint));
- }
- intstack::~intstack()
- {
-
- struct tagint *st;
- st=value->p;
- while(st!=null)
- {
- value->p=st->p;
- free(st);
- st=value->p;
- }
- free(value);
- }
-
- void intstack::push(int y)
- {
- struct tagint *st;
- st=(struct tagint *)malloc(sizeof(struct tagint));
- st->x=y;
- st->p=value->p;
- value->p=st;
- }
-
- int intstack:: gettop ()
- {
- return value->p->x;
- }
-
- int intstack::pop()
- {
- int y=value->p->x;
- struct tagint *st;
- st=value->p;
- value->p=value->p->p;
- free(st);
- return y;
- }
分析:该示例是个简单的用链模拟栈的类,从它使用内存的方式来看不是栈空间,而是动态分配空间。它用一个链来模拟一个先进后出的栈,用push()模拟压栈,gettop()模拟取栈顶元素,pop()在取栈顶元素的同时删除当前栈顶。这个示例演示了栈的基本操作原理,让读者对栈的使用有一个直观的理解。
【责任编辑:
云霞 TEL:(010)68476606】