//Stack.h
template <typename T>
class Stack
{
public:
Stack()
{
;
}
virtual void Push(const T &x) = 0;
virtual void Pop() = 0;
virtual T Top() const = 0;
virtual int IsEmpty() const = 0;
virtual int IsFull() const = 0;
};
//SeqStack.h
#include "Stack.h"
template <typename T>
class SeqStack:public Stack<T>
{
public:
SeqStack(int MAXSIZE = 100);
~SeqStack();
void Push(const T &x);
void Pop();
T Top() const;
int IsEmpty() const;
int Size()const;
private:
T *s;
int top;
int MAXSIZE;
int IsFull() const;
void resize();
};
//SeqStack.cpp
#include "SeqStack.cpp"
using namespace std;
template <typename T>
SeqStack<T>::SeqStack(int MAXSIZE)
{
top = -1;
this->MAXSIZE = MAXSIZE;
s = new T[this->MAXSIZE];
}
template <typename T>
SeqStack<T>::~SeqStack()
{
if (s)
{
delete s;
}
}
template <typename T>
void SeqStack<T>::Pop()
{
if (!IsEmpty())
{
--top;
}
}
template <typename T>
int SeqStack<T>::IsEmpty() const
{
return (top == -1);
}
template <typename T>
int SeqStack<T>::Size()const
{
return top;
}
template <typename T>
void SeqStack<T>::Push(const T &x)
{
if (IsFull())
{
resize();
}
s[++top] = x;
}
template <typename T>
T SeqStack<T>::Top()const
{
T x;
if (IsEmpty())
{
cout << "Stack is empty" << endl;
exit(1);
}
x = s[top];
return x;
}
template <typename T>
int SeqStack<T>::IsFull() const
{
return (top == MAXSIZE);
}
template <typename T>
void SeqStack<T>::resize()
{
T *temp = new T[MAXSIZE];
for (int i = 0; i <=top ; ++i)
{
temp[i] = s[i];
}
delete s;
MAXSIZE *= 2;
s = new T[MAXSIZE];
for (int i = 0; i <=top ; ++i)
{
s[i] = temp[i];
}
delete temp;
}
//main.cpp
#include <iostream>
#include <cstdlib>
#include "SeqStack.h"
using namespace std;
int main(void)
{
SeqStack<int> istk(5);
for (int i = 0; i <5; ++i)
{
istk.Push(i);
}
for (int i = 5; i < 10; ++i)
{
istk.Push(i);
}
while (!istk.IsEmpty())
{
cout << istk.Top() << endl;
istk.Pop();
}
return 0;
}
Stack模板
最新推荐文章于 2022-09-12 22:04:23 发布