📄 mystack.h
字号:
#pragma once
// 基于 C语言 实现的顺序栈
#include <malloc.h> //内存分配 头文件
#include<iostream>
#include<stdexcept> // 抛异常的头文件 是runtime_error 的
//#include<new>
template<class T>
class MyStack{
// LIFO 对象
public :
MyStack(int MyStackSize = 100);
bool ClearStack(); //吧S置为空栈
bool StackEmpty(); //若栈S为空 返回TRUE, 否则返回FALSE
int StackLength(); //返回S的元素个数,==站的长度
bool GetTop(T &e); //若栈不空,则用e返回S的栈顶元素,并返回OK;否则回ERROR
bool Push(T e); //插入元素e为新的栈顶元素 俗称 压栈
bool Pop(T &e); //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK 否则ERROR
~MyStack () {delete [] base;}
private:
int stacksize; //当前已分配储存空间 艺元素为单元
int top; // 栈顶指针下标
T* base; //再战构造之前和销毁之后,base的值为NULL
static const int STACKINCREMENT=20;
} ;
template<class T> MyStack<T>::MyStack(int MyStackSize)
{// MyStack 类构造函数
base = new T[MyStackSize];
top=0;
stacksize = MyStackSize;
}
template<class T> bool MyStack<T>::ClearStack()
{
top=0;
return true;
}
template<class T> bool MyStack<T>::StackEmpty()
{
return (top==0);
}
template<class T> int MyStack<T>::StackLength()
{
return top;
}
template<class T> bool MyStack<T>::GetTop(T &e)
{
if(top==0) return false;
e=*(base+top-1);
return true;
}
template<class T> bool MyStack<T>::Push( T e)
{
if(top>=stacksize)
{
try{ // 异常处理
base=(T*)realloc(base,(stacksize+STACKINCREMENT)*sizeof(T));
}catch(std::bad_alloc &ex) {
std::cout<<"创建内存失败"<<std::endl<<ex.what()<<std::endl;
abort(); //中止
}
top=stacksize+1;
stacksize+=STACKINCREMENT;
}
*(base+top++)=e;
return true;
}
template<class T> bool MyStack<T>::Pop( T& e)
{
if(top==0) return false;
e=*(base+(--top));
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -