65,186
社区成员




#include <assert.h>//用assert命令断言
#include<iostream>
using namespace std;
template <class Type>
class Stack
{
private:
int top;//顶层
Type *elements;//指向栈的指针
int MaxSize;//栈的大小
public:
Stack(int maxsize = 20);
~Stack();
void InitStack();
void Push(const Type &item);//进栈
Type Pop(Stack<Type>&stack); //出栈
void MakeEmpty();//置空栈
bool IsEmpty();//栈空
bool IsFull();//栈满
Type GetTop(Stack<Type>&stack);//得到栈顶元素
};
template <class Type>
Stack<Type>::Stack(int maxsize)
{
top = -1;
MaxSize = maxsize;
elements = new Type[MaxSize];
assert(elements != 0);//断言分配空间不为空
}
template <class Type>
Stack<Type>::~Stack()
{
delete[] elements;
elements = NULL;
assert(elements == 0);//断言分配空间为空,此时删除栈
}
template <class Type>
bool Stack<Type>::IsFull()
{
return top == MaxSize - 1;
}
template <class Type>
bool Stack<Type>::IsEmpty()
{
return top == -1;
}
template <class Type>
void Stack<Type>::MakeEmpty()
{
top = -1;
}
template <class Type>
void Stack<Type>::Push(const Type & item)
{
assert(!IsFull());//断言栈没满
elements[++top] = item;//顶指针上移一位
}
template <class Type>
Type Stack<Type>::Pop(Stack<Type>&stack)
{
assert(!stack.IsEmpty());//断言栈不为空
return elements[top--]; //删除栈顶元素
}
template <class Type>
Type Stack<Type>::GetTop(Stack<Type>&stack)
{
assert(!stack.IsEmpty()); //先决条件断言
return elements[top]; //取出栈顶元素
}
template <class Type>
void Stack<Type>::InitStack()
{
for (int i = 0; i < top; i++)
{
cin >> elements[i];
}
}
int main()
{
int maxsize;
cout << "栈的大小:";
cin >> maxsize;
cout << endl;
Stack<int>stack(maxsize);
stack.InitStack();
cout << "1,进栈 2,出栈 3,查看栈顶值 4,清空栈 5,退出" << endl;
int operation;
cout << "请输入操作:";
cin >> operation;
switch (operation)
{
case 1:
{
int item;
cout << "输入进栈元素" << endl;
cin >> item;
stack.Push(item);
break;
}
case 2:
{
stack.Pop(stack);
break;
}
case 3:
{
stack.GetTop(stack);
break;
}
case 4:
{
stack.MakeEmpty();
break;
}
case 5:
{
exit(1);
break;
}
default:
{
cout << "输入错误!!!此程序将退出!!!" << endl;
exit(0);
break;
}
}
return 0;
}
template <class Type> Type stack<Type>::GetTop (Stack<Type>&stack )
{
assert ( !stack.IsEmpty () ); //先决条件断言
return elements[top]; //取出栈顶元素
}
修改成
template <class Type> Type Stack<Type>::GetTop (Stack<Type>&stack )
{
assert ( !stack.IsEmpty () ); //先决条件断言
return elements[top]; //取出栈顶元素
}