第四次实验代码(其他班)——静态成员与友元

  1. /**********************************************************/     
  2.   //Function                                :   main,Stack类  
  3.   //parm                                    :       
  4.   //comment                                 :        
  5.   //return                                  :   void    
  6.   //Author                                  :        
  7.   //date                                    :   2012.12.27    
  8. /**********************************************************/  
  9. #include <iostream.h>  
  10. #include <stdlib.h>  
  11. #include <time.h>  
  12. #define NULL 0  
  13.   
  14. struct SNode{  
  15.     int data;    //data domain  
  16.     SNode *next;   //pointer domain  
  17. };  
  18.   
  19. class Stack{  
  20. public:  
  21.     Stack();  
  22.     ~Stack();  
  23.     void Push(int e);        //insert a data into stack  
  24.     int Pop();               //delete a data from stack  
  25.     int GetTop();            //Get the data of Stack Top  
  26.     int Empty();             //Judge the Stack empty or not  
  27.     friend int GetSum();     //get sum of stack,friend function  
  28.     //friend class getsum;   // get sum of stack,friend class  
  29.     static int num;          //static number  
  30. private:  
  31.     SNode *Head;             //head node  
  32. };  
  33.   
  34. int Stack::num = 0;            //initialize static number  
  35.   
  36. Stack::Stack()  
  37. {  
  38.     Head = new SNode;  
  39.     Head->next = NULL;  
  40. }  
  41.   
  42. Stack::~Stack()  
  43. {  
  44.     delete Head;           //here,should delete every node of link table using loop  
  45. }  
  46.   
  47. void Stack::Push(int e)  
  48. {  
  49.     SNode *p,*q;  
  50.     if(!(p = new SNode))  
  51.         exit(0);  
  52.     p->data = e;  
  53.     q = Head;  
  54.     while(q->next)  
  55.         q = q->next;  
  56.     q->next = p;  
  57.     p->next = NULL;  
  58.     num++;  
  59. }  
  60.   
  61. int Stack::Empty()  
  62. {  
  63.     return !num;  
  64. }  
  65.   
  66. int Stack::Pop()  
  67. {  
  68.     int e;  
  69.     if(Empty())  
  70.     {  
  71.         cout<<"The Stack is empty!"<<endl;  
  72.         exit(0);  
  73.     }  
  74.     SNode *p,*q;  
  75.     p = Head;  
  76.     q = p;  
  77.     while(p->next)  
  78.     {  
  79.         q = p->next;  
  80.         if(!q->next)  
  81.             break;  
  82.         p = p->next;  
  83.     }  
  84.     p->next = NULL;  
  85.     e = q->data;  
  86.     delete q;  
  87.     num--;  
  88.     return e;  
  89. }  
  90.   
  91. int Stack::GetTop()  
  92. {  
  93.     int e;  
  94.     if(Empty())  
  95.     {  
  96.         cout<<"The Stack is empty!"<<endl;  
  97.         exit(0);  
  98.     }  
  99.     SNode *p;  
  100.     p = Head;  
  101.     while(p->next)  
  102.     {  
  103.         p = p->next;  
  104.     }  
  105.     e = p->data;  
  106.     return e;  
  107. }  
  108.   
  109. int GetSum(Stack &a)  
  110. {  
  111.     int sum = 0,m,tmp;  
  112.     m = a.num;  
  113.     cout<<endl<<"Pop Stack List is:"<<endl;  
  114.     for(int i = 0;i<m;i++)  
  115.     {  
  116.         tmp = a.Pop();  
  117.         cout<<"  "<<tmp;  
  118.         sum+ = tmp;  
  119.     }  
  120.     cout<<endl;  
  121.     return sum;  
  122. }  
  123.   
  124. void main()  
  125. {  
  126.     Stack s;  
  127.     int temp;  
  128.     srand((unsigned)time(NULL));  
  129.     cout<<"Push List is:"<<endl;  
  130.     for(int i = 1;i< = 100;i++)  
  131.     {  
  132.         temp = rand()%1000;  
  133.         if(s.Empty()||temp > s.GetTop())  
  134.         {  
  135.             cout<<"  "<<temp;  
  136.             s.Push(temp);  
  137.         }  
  138.         if(s.GetTop()> = 999)  
  139.             break;  
  140.     }  
  141.     cout<<endl<<"SUM is:"<<GetSum(s)<<endl;  
  142. }  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值