数据结构与算法——链栈的c++实现

链栈:

#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>

using namespace std;


#define MAXSIZE 100
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2


/*
	栈:初始化、销毁、判定空栈、求长度、取栈顶元素、置空栈、入栈、出栈
*/


// 栈的定义
typedef struct StackNode
{
	int data;  // 数据域
	struct StackNode* next;  // 指针域
}StackNode, *LinkStack;

// 初始化
bool InitStack(LinkStack& S)
{
	// 王卓老师视频没有头结点,但是可以创建一个头节点,数据域同于存放元素个数
	// 构造一个空栈,栈顶指针置为空
	/*S = new StackNode;
	S->next = nullptr;
	S->data = 0;*/
	S = nullptr;
	return true;
}

// 判断栈是否为空
bool IsEmpty(LinkStack S)
{
	if (S == nullptr) return true;
	else
	{
		return false;
	}
}

// 链栈的入栈
bool PushStack(LinkStack& S, int e)
{
	StackNode* p = new StackNode;  // 生成新结点 p
	p->data = e;
	p->next = S;  // 将新结点的 next域赋值为 S 指针指向的地址,也就是将新结点插入到栈顶
	S = p;   //将S指针向上移动到节点p处
	return true;
}

// 链表的出栈
bool PopStack(LinkStack& S, int& e)
{
	if (S == nullptr)return false;
	else
	{
		e = S->data;  // 将栈顶数据域赋给 e 带回
		LinkStack p = S;   //创建新指针 p,并将p指向 栈顶空间
		S = S->next;  // 将S指针移到栈定空间的下面一个空间处,到这一步实际做的就是栈定元素出栈了
		delete p;   //释放指针p;
	}
}

// 取栈顶元素
int GetTopElem(LinkStack S, int& e)
{
	if (S == nullptr) return false;
	e = S->data;
	return e;
}

int main()
{
	LinkStack S;
	InitStack(S);
	cout << IsEmpty(S) << endl;

	// 入栈
	PushStack(S, 50);
	PushStack(S, 40);
	PushStack(S, 30);
	PushStack(S, 20);
	PushStack(S, 10);
	PushStack(S, 10101);

	int e;
	cout << "栈定元素为:" << GetTopElem(S, e) << endl;

	cout << "依次出栈的元素为:" << endl;
	while (S != nullptr)
	{
		int p;
		PopStack(S, p);
		//cout << GetTopElem(S, p) << endl;
		cout << p << endl;
	}
	
	return 0;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值