帮别人回答问题时候写下的,顺便贴在这,送给有需要的人。
#include
using namespace std;
#include
using std::string;
typedef char ElemType;
class Stack { //stack类型结构体
public:
Stack(); //构造函数
ElemType *stack; //存放栈元素的数组
int Maxsize; //栈的最大尺寸
int top; //栈顶
public:
void init(Stack &s); //创建栈。都传递引用,因为操作的是同一个栈
bool empty(Stack &s); //判断是否是空栈
void ruzhan(Stack &s, ElemType item); //入栈
ElemType chuzhan(Stack &s, char mk); //出栈
ElemType get(Stack &s); //取元素
void destroy(Stack &s); //销毁
};
Stack::Stack() :Maxsize(0), top(-1), stack(NULL) //构造函数中初始化成员对象
{
}
void Stack:: init(Stack &s) //创建栈
{
s.Maxsize = 20;
s.stack = new ElemType[s.Maxsize]; //栈大小为20
if (!s.stack) {
cout << “动态分配失败” << endl;
exit(1);
}
s.top = -1; //生成一个空栈
}
bool Stack::empty(Stack &s) //判断是否是空栈
{
if (s.Maxsize == 0)
{
s.top = -1;
return true;
}
return false;
}
void Stack::ruzhan(Stack &s, ElemType item) //入栈
{
if (s.top == s.Maxsize - 1) {
int k = sizeof(ElemType); //char类型的大小
s.stack = (ElemType*)realloc(s.stack, 2 * s.Maxsize*k);
s.Maxsize = 2 * s.Maxsize; //将栈扩大一倍
}//满栈,不能将元素插入栈顶,加空间
s.top++;
s.stack[s.top] = item;
}
ElemType Stack::chuzhan(Stack &s, char mk) //出栈
{
if (s.top == -1) {
cout << “空栈,出栈失败” << endl;
exit(1);
}
mk=s.stack[s.top]; //最上面一个是空字符
s.top–;
return mk;
}
ElemType Stack::get(Stack &s) //取元素
{
return s.stack[s.top];
}
void Stack::destroy(Stack &s) //释放
{
if (s.stack) {
delete[]s.stack;
s.stack =NULL;
}
s.top = -1;
s.Maxsize = 0;
}
void main()
{
Stack sk;
sk.init(sk);
if (sk.empty(sk) == true)
{
cout << “空栈” << endl;
}
else
{
cout << “不空” << endl;
}
char dk[] = “abcdefgh”;
for (int m = 0; m < sizeof(dk); m++)
{
sk.ruzhan(sk, dk[m]);
}
for (int i = 0; i < sizeof(dk); i++)
{
char dd = sk.chuzhan(sk, dk[i]);
cout << dd << endl; //最上面的一个字符是\0,所有多了一次换行
}
system(“pause”);
sk.destroy(sk);
return;
}