题目:
手动实现顺序栈,要求实现数据结构中,所有栈的相关操作
main.c
#include <iostream>
#include <cstring>
#define MAXSIZE 10 //栈的大小
using namespace std;
//创建模板类
template <typename T>
class My_stack
{
private:
//数据元素
T *data;
//栈顶
int top;
T buf;
public:
//创建栈
My_stack();
//判断栈是否为满
bool stack_full();
//判断栈是否为空
bool stack_empty();
//栈的插入
void stack_inset(T buf);
//栈的删除
void stack_delete();
//栈的遍历
void stack_show();
//析构函数
~My_stack();
};
//创建栈
template <typename T>
My_stack<T> ::My_stack()
{
data = new T[MAXSIZE]; //为栈创建空间
if(nullptr == data)
{
cout << "stack_create filed" << endl;
return;
}
//栈空
top = -1;
}
//判断栈是否为满
template <typename T>
bool My_stack<T> ::stack_full()
{
if(MAXSIZE -1 == top)
{
return false;
}
else
{
return true;
}
}
//判断栈是否为空
template <typename T>
bool My_stack<T> ::stack_empty()
{
if(-1 == top)
{
return false;
}
else
{
return true;
}
}
//栈的插入
template <typename T>
void My_stack<T> ::stack_inset(T buf)
{
//判断栈是否为满
if(stack_full() == 0)
{
cout << top << endl;
cout << "栈满_插入失败" << endl;
return;
}
//入栈
data[++top] = buf;
}
//栈的删除
template <typename T>
void My_stack<T> ::stack_delete()
{
//判断栈是否为空
if(stack_empty() == 0)
{
cout << "栈空_删除失败" << endl;
return;
}
//删除,先弹后减
cout << "删除的元素:" << data[top--] << endl;
}
//栈的遍历
template <typename T>
void My_stack<T> ::stack_show()
{
//循环输出
for(int i = 0; i <= top; i++)
{
cout << data[i] << endl;
}
}
template <typename T>
My_stack<T> ::~My_stack<T>()
{
delete []data;
}
int main()
{
string buf;
My_stack<string> s;
for(int i = 1; i <= MAXSIZE; i++)
{
cout << "请插入[" << i << "] :";
cin >> buf;
s.stack_inset(buf);
}
s.stack_show();
s.stack_delete();
s.~My_stack();
return 0;
}