仿写栈的结构,实现元素的出入栈

本文详细介绍了一个使用C++实现的栈数据结构,包括构造函数、入栈、出栈、判断空栈等核心功能,并通过具体示例展示了如何在程序中使用栈。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

帮别人回答问题时候写下的,顺便贴在这,送给有需要的人。

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值