c++实现栈建立,插入,删除

# include<iostream>
using namespace std;
#define STACK_INIT_SIZE 10
#define STACKINCREMENT 5
typedef int SElemType;

//定义栈结构
typedef struct
{
	SElemType *base;
	SElemType *top;
	int stacksize;
}SqStack;

//建立栈
void InitStack(SqStack &S)
{
	S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType));
	if (!S.base)
	{
		cout << endl << "Allocate space failure !" << endl;
	}
	S.top = S.base;
	S.stacksize = STACK_INIT_SIZE;
	*S.top++ = 5;	//先将元素赋给*S.stop, 然后指针S.top++
	*S.top++ = 8;             
	*S.top++ = 12;
	*S.top++ = 18;
	*S.top++ = 30;
	*S.top++ = 37;
	*S.top++ = 45;
	*S.top++ = 78;
}

//返回栈顶元素
void GetTop(SqStack &S)
{
	SElemType e;
	if (S.top == S.base) cout << "栈为空!" << endl;
	e = *(S.top - 1);
	cout << "Top元素为:" << e << endl;

}

//插入元素e
void Push(SqStack &S, SElemType e)
{
	if (S.top - S.base >= S.stacksize)
	{
		S.base = (SElemType *)realloc(S.base, (S.stacksize + STACKINCREMENT)*sizeof(SElemType));
		if (!S.base)cout << "追加存储空间失败!" << endl;
		S.top = S.base + S.stacksize;	//重新初始化S.top的位置
		S.stacksize += STACKINCREMENT;	//栈长度加上增加的长度
	}
	*S.top++ = e;
	cout << endl << "插入成功!" << endl;
}

//打印栈
void PrintStack(SqStack &S)
{
	SElemType *p;
	cout << endl << endl << "栈元素";
	cout << endl << "------";
	cout << endl << "The old SqStack is (base to top) : " << endl;
	for (p = S.base; p != S.top; p++)		//output the old SqStack
	{
		cout << *p << " 地址为:" << p << endl;
	}
	cout << S.base << endl;
}

//删除顶元素
void Pop(SqStack &S)
{
	if (S.top == S.base) cout << "栈为空,删除失败!" << endl;
	--S.top;
}
void main()
{
	SqStack S;
	SElemType e;
	e = 999;
	cout << endl << endl << "InitStack.cpp";
	cout << endl << "==============" << endl;
	//建栈,并初始化
	InitStack(S);

	//返回top元素
	GetTop(S);
	//打印栈元素
	PrintStack(S);

	//向栈插入元素e
	Push(S, e);
	PrintStack(S);

	//删除栈顶元素
	Pop(S);
	PrintStack(S);

	system("pause");//防止运行结果一闪而过
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sky@sea

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值