数据结构
简单的顺序栈实现
. c++实现的部分
#define LONGTH 22
template <class T>
class Stack {
public:
Stack(int size = LONGTH);
~Stack();
bool isEmpty() {
return mTop == 0;
}
bool clear() {
mTop = 0;
return true;
}
bool Push(const T& v);
bool Pop(T& v);
bool getTop(T& v);
template <class T>
friend std::ostream& operator<< (std::ostream& os, Stack<T>& s);
private:
T* mElem;
int mTop;
int mSize;
int mIncrement;
};
template <class T>
std::ostream& operator<< (std::ostream& os, Stack<T>& s) {
if (s.mTop == 0) {
os << "";
return os;
}
os << "[ ";
for (int i = 0; i < s.mTop; i++) {
os << s.mElem[i] << " ";
}
os << "] top" << std::endl;
return os;
}
template <class T>
Stack<T>::Stack(int size) :mSize(size), mIncrement(LONGTH){
mElem = new T[mSize];
assert(mElem != NULL);
mTop = 0;
}
template <class T>
Stack<T>::~Stack() {
if (mElem != NULL)
delete[] mElem;
}
template <class T>
bool Stack<T>::Push(const T& v) {
T* newArr = NULL;
if (mTop == mSize) {
newArr = new T[mSize + mIncrement];
assert(newArr != NULL);
for (int i = 0; i < mSize; i++) {
newArr[i] = mElem[i];
}
delete[] mElem;
mElem = newArr;
mSize += mIncrement;
}
mElem[mTop++] = v;
return true;
}
template <class T>
bool Stack<T>::Pop(T& v) {
if (mTop == 0)
return false;
v = mElem[--mTop];
return true;
}
template <class T>
bool Stack<T>::getTop(T& v) {
if (mTop == 0)
return false;
v = mElem[mTop - 1];
return true;
}
这个地方的友元函数后面出现了一个问题,报错的原因我还不明白;
查找到的解决办法是在类中的友元函数前面加上
template <class T>
后面也确实没有在报错了
给自己当笔记使用吧。