/*********************************栈的抽象类的定义****************************/
template <class dataType>
class stack {
public:
virtual bool isEmpty() = 0;
virtual void push(const dataType& d) = 0;
virtual dataType pop() = 0;
virtual dataType top() = 0;
};
/*******************************顺序栈类的定义********************************/
#include "stack.h"
template <class dataType>
class seqStack:public stack<dataType> {
public:
seqStack(int initSize = 10); //构造函数,默认栈的容量为10
bool isEmpty(); //判断栈是否为空
void push(const dataType& d); //进栈函数
dataType pop(); //出栈函数
dataType top(); //返回栈顶元素
~seqStack(); //析构函数
private:
dataType *data; //栈顶指针
int maxSize; //栈的容量
int top_p; //栈顶指针
void resize(); //将栈的容量扩大一倍
};
/*********************************顺序栈类的实现******************************/
#include <iostream>
using namespace std;
template <class dataType>
seqStack<dataType>::seqStack(int initSize) {
maxSize = initSize;
data = new dataType[maxSize];
top_p = -1;
cout << "\nCreate stack success!\n";
}
template <class dataType>
bool seqStack<dataType>::isEmpty(){
return top_p == -1;
}
template <class dataType>
void seqStack<dataType>::resize() {
maxSize *= 2;
dataType* tmp = data;
data = new dataType[maxSize];
for (int i = 0; i <= top_p; ++i) {
data[i] = tmp[i];
}
delete tmp;
}
template <class dataType>
void seqStack<dataType>::push(const dataType& d) {
if (top_p == maxSize-1) {
resize();
}
data[++top_p] = d;
cout<< "\nPush data success!\n";
}
template <class dataType>
dataType seqStack<dataType>::pop() {
//如果栈为空,抛出异常值0
if (top_p == -1) {
throw 0;
}
return data[top_p--];
}
template <class dataType>
dataType seqStack<dataType>::top() {
//如果栈为空,抛出异常值0
if (top_p == -1) {
throw 0;
}
return data[top_p];
}
template <class dataType>
seqStack<dataType>::~seqStack() {
delete []data;
}
C++类模板实现顺序栈
最新推荐文章于 2023-08-21 17:10:38 发布