//头文件
#ifndef STACKLIST_H
#define STACKLIST_H
#include
#include
#include
using namespace std;
template
class StackList{
private:
T* stackList;
int maxSize;//栈的最大空间
int top;//标记栈顶
public:
StackList();//默认构造函数
StackList(int size);//构造函数
~StackList();
void Clear();//清空栈
bool Push(const T item);//将元素压入栈
void Pop();//删除栈顶元素
T Top();//返回栈顶元素
T TopAndPop();//删除并返回栈顶元素
bool isEmpty();//是否空栈
bool isFull();//是否满栈
void Print();
void Sort();
int Length();
};
template
int StackList
::Length() { int length = top + 1; return length; } template
StackList
::StackList() { maxSize = 0; top = -1; } template
StackList
::StackList(int size){ maxSize = size; stackList = new T[maxSize]; top = -1;//top=-1代表栈为空 } template
StackList
::~StackList() { delete[]stackList; } template
void StackList
::Clear() { top = -1; } template
bool StackList
::Push(const T item) { if (maxSize == 0) { stackList = new T[1];//若是在定义实例时没有直接给出栈的空间大小,则在第一次压入栈操作时分配一个空间 maxSize = 1; //在这里一定要记住将maxSize设置为1,因为一开始在定义对象时你并没有为maxSize赋值, //所以他被初始化为0,若不更改在下面的程序中会出现 //错误,因为下面有关于maxSize的计算maxSize*=2; } else if (top == maxSize - 1) { //可以只扩大一个空间,但是会增加操作次数,是程序的速度变慢,所以一次增加两倍 T* str = new T[maxSize * 2]; for (int i = 0; i < maxSize; i++) { str[i] = stackList[i]; } delete[]stackList;//空间若是new出来的,必须要delete,防止内存泄露 stackList = str; maxSize *= 2; } stackList[++top] = item; return true; } template
void StackList
::Pop() { if (top == -1) { //如果为空栈则不进行任何操作 return; } top--; } template
T StackList
::Top() { if (top == -1) { return; } else { return stackList[top]; } } template
T StackList
::TopAndPop() { T value; if (top == -1) return; else { value=stackList[top--]; return value; } } template
bool StackList
::isEmpty() { if (top == -1) return true; else return false; } template
bool StackList
::isFull() { if (top == maxSize - 1) return true; else return false; } template
void StackList
::Print() { for (int i = 0; i <= top; i++) { cout << stackList[i] << " "; } cout << endl; } template
void StackList
::Sort() { //该函数的实现借助了vector容器 vector
ptr; for (int i = 0; i <= top; i++) { ptr.push_back(stackList[i]); } sort(ptr.begin(),ptr.end()); for (int i = 0; i <= top; i++) { stackList[i] = ptr[i]; } } #endif //主函数 #include"StackList.h" int main(int argc, char argv[]) { int length; StackList
list; for (int i = 0; i < 10; i++) { int number; cin >> number; list.Push(number); } length=list.Length(); cout << length << endl; list.Print(); list.Sort(); list.Print(); return 0; }
栈的基本操作模板类,包括栈的压入,出栈,删除栈顶元素,清空栈等操作
最新推荐文章于 2022-04-19 16:16:32 发布