第四次实验参考代码

栈实现与应用
本文介绍了一个简单的栈数据结构实现,并通过C++代码演示了如何进行元素的压栈、弹栈等操作。此外,还展示了如何利用栈计算元素总和。

仅供参考

/**********************************************************/ //Function : main,Stack类 //parm : //comment : //return : void //Author : //date : 2011.11.13 /**********************************************************/ #include <iostream.h> #include <stdlib.h> #include <time.h> #define NULL 0 struct SNode{ int data; //data domain SNode *next; //pointer domain }; class Stack{ public: Stack(); ~Stack(); void Push(int e); //insert a data into stack int Pop(); //delete a data from stack int GetTop(); //Get the data of Stack Top int Empty(); //Judge the Stack empty or not friend int GetSum(); //get sum of stack,friend function //friend class getsum; // get sum of stack,friend class static int num; //static number private: SNode *Head; //head node }; int Stack::num = 0; //initialize static number Stack::Stack() { Head = new SNode; Head->next = NULL; } Stack::~Stack() { delete Head; //here,should delete every node of link table using loop } void Stack::Push(int e) { SNode *p,*q; if(!(p = new SNode)) exit(0); p->data = e; q = Head; while(q->next) q = q->next; q->next = p; p->next = NULL; num++; } int Stack::Empty() { return !num; } int Stack::Pop() { int e; if(Empty()) { cout<<"The Stack is empty!"<<endl; exit(0); } SNode *p,*q; p = Head; q = p; while(p->next) { q = p->next; if(!q->next) break; p = p->next; } p->next = NULL; e = q->data; delete q; num--; return e; } int Stack::GetTop() { int e; if(Empty()) { cout<<"The Stack is empty!"<<endl; exit(0); } SNode *p; p = Head; while(p->next) { p = p->next; } e = p->data; return e; } int GetSum(Stack &a) { int sum = 0,m,tmp; m = a.num; cout<<endl<<"Pop Stack List is:"<<endl; for(int i = 0;i<m;i++) { tmp = a.Pop(); cout<<" "<<tmp; sum+ = tmp; } cout<<endl; return sum; } void main() { Stack s; int temp; srand((unsigned)time(NULL)); cout<<"Push List is:"<<endl; for(int i = 1;i< = 100;i++) { temp = rand()%1000; if(s.Empty()||temp > s.GetTop()) { cout<<" "<<temp; s.Push(temp); } if(s.GetTop()> = 999) break; } cout<<endl<<"SUM is:"<<GetSum(s)<<endl; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值