#include "stdio.h"
#include "string.h"
enum Error_code{success,overflow,underflow,fail};
const int maxn=100;
typedef int Stack_entry;
class Stack
{
private:
int top;
Stack_entry entry[maxn];
public :
Stack(){top=-1;memset(entry,0,sizeof(entry));}//用于初始化栈结构
Error_code push(const Stack_entry&item);//元素入栈
Error_code Top(Stack_entry&item);//返回栈顶元素,元素保留栈中
int size();
Error_code pop();//元素出栈,但出栈元素不被保留
bool operator==(Stack &s);
};
//Stack.cpp
Error_code Stack::push(const Stack_entry&item)
{
Error_code outcome=success;
if(top>=maxn)
outcome=overflow;
else
entry[++top]=item;
return outcome;//元素入栈操作
}
Error_code Stack::pop()
{
Error_code outcome=success;
if(top==-1)
outcome=underflow;
else
top--;
return outcome;
}
Error_code Stack::Top(Stack_entry&item)
{
Error_code outcome=success;
if(top==-1)
outcome=underflow;
else
item=entry[top];//top始终指向栈顶元素
return outcome;
}
int Stack::size()
{
return top+1;
}
bool Stack::operator==(Stack&s)//重载==运算符判断对象是否相等
{
int item;
int i;
int count=top;
if(s.size()!=top+1)
return false;
else
{
while(s.Top(item)!=underflow)
{
if(item!=entry[count--])
return false;
s.pop();
}
}
return true;
}
//以上是Stack类的基本实现,当然这只是Stack类的一小部分
//作业:
Error_code copy(Stack&dest,Stack&source)
{
Error_code outcome=success;
Stack temp;//临时栈
Stack_entry item;
while(underflow!=source.Top(item))
{
temp.push(item);
source.pop();
}
while(underflow!=temp.Top(item))
{
dest.push(item);
source.push(item);
temp.pop();
}
if(dest==source)
return success;
else
return fail;
}//将栈source中的数据,复制到dest栈中,source栈没被改变
//主函数的实现
int main()
{
Stack s;
Stack d;
int item;
int i=0;
printf("请输入 10 个元素:\nsource=");
for(i;i<10;i++)
{
scanf("%d",&item);
s.push(item);
}
printf("\n");
for(i=0;i<10;i++)
{
s.Top(item);
printf("dest= %d\n",item);
s.pop();
}
if(success==copy(d,s))
printf("复制成功!\n\n");
return 0;
}