#include <iostream>
#include <stdlib.h>
using namespace std;
template <typename T> class SeqStack
{
private:
T* elements;
int top;
int maxSize;
public:
SeqStack(const int sz = 100)
{
maxSize = sz;
elements = new T [maxSize];
top = -1;
}
SeqStack(const SeqStack<T>& s)
{
top = s.top;
maxSize = s.maxSize;
elements = new T [maxSize];
if(elements == NULL)
{
cout << "存储分配失败" << endl;
exit(1);
}
for(int i = 0; i <= top; i++)
{
elements[i] = s.elements[i];
}
}
SeqStack<T>& operator= (const SeqStack<T>&s)
{
if(this == &s)
{
return *this;
}
delete [] elements;
maxSize = s.maxSize;
top = s.top;
elements = new T [maxSize];
if(elements == NULL)
{
cout << "存储分配失败" << endl;
exit(1);
}
for(int i = 0; i <= top; i++)
{
elements[i] = s.elements[i];
}
}
~SeqStack()
{
delete [] elements;
}
void overflowProcess(int newSize=50)
{
T* newData;
if(newSize <= 0)
{
cout << "无效的数组大小" << endl;
exit(1);
}
if(newSize != maxSize)
{
newData = new T [newSize];
if(newData == NULL)
{
cout << "存储分配失败" << endl;
exit(1);
}
for(int i = 0; i <= top; i++)
{
newData[i] = elements[i];
}
delete [] elements;
maxSize = newSize;
}
}
void Push(const T& x);
bool Pop(T& x);
bool getTop(T& x) const;
bool IsEmpty() const
{
return top == -1;
}
bool IsFull() const
{
return top == maxSize-1;
}
int getSize() const
{
return top+1;
}
void MakeEmpty()
{
top = -1;
return;
}
friend ostream& operator << (ostream& out, SeqStack<T>& s)
{
out << "top=" << s.top << endl;
for(int i = 0; i < s.top; i++)
{
out << i << ":" << s.elements[i] << endl;
}
return out;
}
};
template <class T>
void SeqStack<T>::Push(const T& x)
{
if(IsFull())
overflowProcess();
else
elements[++top] = x;
}
template <class T>
bool SeqStack<T>::Pop(T& x)
{
if(IsEmpty())
return false;
else
{
x = elements[top--];
return true;
}
}
template <class T>
bool SeqStack<T>::getTop(T& x) const
{
if(IsFull())
return false;
else
{
x = elements[top];
return true;
}
}
[数据结构]栈的实现(c++/类模板)
最新推荐文章于 2023-08-21 17:10:38 发布