#include <iostream>
using namespace std;
template <typename T>class Stack {
private:
public:
Stack() {}
virtual ~Stack() {}
virtual T pop() = 0;
virtual void push(const T& object)=0;
virtual const T& getTop()const = 0;
virtual int length()const = 0;
};
template<typename T> class SequenceStack :public Stack<T> {
private:
T* ptr;
int maxSize;
int top;
public:
SequenceStack(int size=100);
~SequenceStack();
T pop();
void push(const T& object);
const T& getTop()const;
int length()const;
bool isEmpty()const;
};
template<typename T>
SequenceStack<T>::SequenceStack(int size)
{
maxSize = size;
ptr = new T(maxSize);
top = -1;
}
template<typename T>
SequenceStack<T>::~SequenceStack() {
delete[]ptr;
}
template<typename T>
T SequenceStack<T>::pop() {
if (top ==-1) {
cout << "Stack is empty" << endl;
exit(1);
}
return ptr[top--];
}
template<typename T>
void SequenceStack<T>::push(const T& object) {
if (top == maxSize) {
cout << "Stack is full" << endl;
exit(1);
}
ptr[++top] = object;
}
template<typename T>
const T& SequenceStack<T>::getTop()const {
if (top == -1) {
cout << "Stack is empty" << endl;
exit(1);
}
return ptr[top];
}
template<typename T>
int SequenceStack<T>::length()const {
return top + 1;
}
template<typename T>
bool SequenceStack<T>::isEmpty()const {
if (top == -1) {
return 0;
}
return 1;
}
int main()
{
SequenceStack<int> object;
cout << "1、pop" << endl;
cout << "2、push" << endl;
cout << "3、isEmpty" << endl;
cout << "4、getTop" << endl;
cout << "5、length" << endl;
int judge;
while (1)
{
cout << "请按键" << endl;
cin >> judge;
switch (judge) {
case 1:object.pop();
break;
case 2:cout << "请输入推入的元素" << endl;
int temp;
cin >> temp;
object.push(temp);
break;
case 3:
cout << "the answer is" << object.isEmpty() << endl;
break;
case 4:
cout << "the top is " << object.getTop() << endl;
break;
case 5:
cout << "the lengh is " << object.length() << endl;
}
}
}
C++———顺序栈的实现
最新推荐文章于 2021-07-31 11:03:12 发布