【数据结构】链栈的基本操作

1. 链栈的定义

//链栈的定义 
typedef struct LinkNode{
	int data;
	struct LinkNode *next;
}*LiStack;

2. 链栈的初始化

//链栈的初始化
LiStack InitStack(LiStack &S){
	S = NULL;
	return S;
} 

3. 进栈

//进栈 
bool Push(LiStack &S, int e){
	LiStack p = (LiStack)malloc(sizeof(struct LinkNode));
	p->data = e;
	p->next = S;
	S = p; 
	return true;
}

4. 出栈

//出栈
bool Pop(LiStack &S, int &e){
	if(S == NULL)
		return false;
	e = S->data;
	LiStack p = S;
	S = S->next;
	free(p);
	return true;
} 

5. 获取栈顶元素

//获取栈顶元素
bool GetTop(LiStack S, int &e){
	if(S == NULL)
		return false;
	e = S->data;
	return true;
} 

6. 判断栈是否为空

//判断栈是否为空 
bool StackEmpty(LiStack S){
	if(S == NULL)
		return true;
	return false; 
}

7. 销毁栈

//销毁栈 
bool DestoryStack(LiStack &S){
	LiStack p, q = S;
	while(p){
		p = q->next;
		cout<<"正在删除元素:"<<q->data<<endl;
		free(q);
		q = p;
	}
	return true;
}

8. 完整代码

#include<iostream>
#include<stdlib.h>
using namespace std;


/**
  * TODO 数据结构,链栈的实现(不带头结点) 
  * @author 有爱的大鹏叔 
  */
  
//链栈的定义 
typedef struct LinkNode{
	int data;
	struct LinkNode *next;
}*LiStack;
//链栈的初始化
LiStack InitStack(LiStack &S){
	S = NULL;
	return S;
} 
//进栈 
bool Push(LiStack &S, int e){
	LiStack p = (LiStack)malloc(sizeof(struct LinkNode));
	p->data = e;
	p->next = S;
	S = p; 
	return true;
}
//出栈
bool Pop(LiStack &S, int &e){
	if(S == NULL)
		return false;
	e = S->data;
	LiStack p = S;
	S = S->next;
	free(p);
	return true;
} 
//获取栈顶元素
bool GetTop(LiStack S, int &e){
	if(S == NULL)
		return false;
	e = S->data;
	return true;
} 
//判断栈是否为空 
bool StackEmpty(LiStack S){
	if(S == NULL)
		return true;
	return false; 
}
//销毁栈 
bool DestoryStack(LiStack &S){
	LiStack p, q = S;
	while(p){
		p = q->next;
		cout<<"正在删除元素:"<<q->data<<endl;
		free(q);
		q = p;
	}
	return true;
}

int main(){
	LiStack S;
	InitStack(S);
	Push(S, 1);
	Push(S, 2);
	Push(S, 2);
	Push(S, 5);
	Push(S, 12);
	int e;
	GetTop(S, e);
	cout<<"当前栈顶元素为:"<<e<<endl;
	int p;
	Pop(S, p);
	cout<<"删除的元素为:"<<p<<endl;
	GetTop(S, e);
	cout<<"当前栈顶元素为:"<<e<<endl;
	DestoryStack(S);
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值