设为首页 加入收藏

TOP

21.2.2 使用栈内存
2013-10-07 01:15:29 来源: 作者: 【 】 浏览:76
Tags:21.2.2 使用 内存

21.2.2  使用栈内存

由于栈是由系统来管理,所以不会直观地感觉到在使用栈,除非程序自己来模拟一个栈。

【示例21-5】 局部变量自动从栈上获得存储空间。

  1. void main()  
  2. {  
  3.     int a;          //在栈上分配空间  
  4.     int b;          //在栈上分配空间  
  5.     int c;          //在栈上分配空间  
  6.     a = 25;         //赋值  
  7.     b = 68;         //赋值  
  8.     c = a + b;      //使用 a, b对c赋值  
  9.     std::cout <<  "the value of a + b is : "  <<  c;   //使用c  

分析:该示例有3个局部变量,都从栈上获得内存空间。每个变量的名字与一个栈上空间相对应。由于栈由系统来管理,所以使用时程序没有特别需要注意的地方。因此使用栈时,只需给出对应的变量名即可。

【示例21-6】 补全了示例21-4,演示了用指针链模拟栈的方法,以说明栈的操作原理。

  1. class intstack  
  2. {  
  3. public:  
  4.     intstack();  
  5.     ~intstack();  
  6. private:  
  7.     struct tagint  
  8.     {  
  9.         int x;              //保存数据  
  10.         struct tagint *p;   //指向下一个节点  
  11.     } *value;  
  12. public:  
  13.     void push(int y);       //压栈  
  14.     int pop();              //出栈  
  15.     int gettop();           //得到栈顶元素的值  
  16. }  
  17. intstack::intstack()  
  18. {  
  19.     value=(struct tagint *)malloc(sizeof(struct tagint));   //申请内存空间  
  20. }  
  21. intstack::~intstack()  
  22. {  
  23.     //释放  
  24.     struct tagint *st;  
  25.     st=value->p;  
  26.     while(st!=null)  
  27.     {  
  28.         value->p=st->p;                 //指向下一个位置  
  29.         free(st);                       //释放  
  30.         st=value->p;                    //指向下一个位置  
  31.     }  
  32.     free(value);  
  33. }  
  34. //压栈  
  35. void intstack::push(int y)  
  36. {  
  37.     struct tagint *st;  
  38.     st=(struct tagint *)malloc(sizeof(struct tagint));      //申请内存空间  
  39.     st->x=y;                            //赋值  
  40.     st->p=value->p;                     //指向当前链头  
  41.     value->p=st;                        //链到栈头  
  42. }  
  43. //得到栈顶元素的值  
  44. int intstack:: gettop ()  
  45. {  
  46.     return value->p->x;                 //返回栈顶元素的值  
  47. }  
  48. //返回栈顶元素的值,同时删除栈顶  
  49. int intstack::pop()  
  50. {  
  51.     int y=value->p->x;                  //栈顶值  
  52.     struct tagint *st;  
  53.     st=value->p;                        //栈顶元素  
  54.     value->p=value->p->p;               //下一个元素成为栈顶  
  55.     free(st);                           //释放  
  56.     return y;                           //返回栈顶元素的值  

分析:该示例是个简单的用链模拟栈的类,从它使用内存的方式来看不是栈空间,而是动态分配空间。它用一个链来模拟一个先进后出的栈,用push()模拟压栈,gettop()模拟取栈顶元素,pop()在取栈顶元素的同时删除当前栈顶。这个示例演示了栈的基本操作原理,让读者对栈的使用有一个直观的理解。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇21.2.3 释放栈内存 下一篇21.2.1 申请栈内存

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: