数据结构学习之路6 用链表实现堆栈

这次代码一波两折,本来想着堆栈这种结构只有一端进行操作,这样我只记录rear的位置就好了,就不用像链表实现的队列内样定义两个结构体,然后我就一路写,push函数直接使p指向队尾就好,结果写到pop的时候就傻眼了,我找不到上一个节点!我的指针指向着最后一个节点,那我怎么出栈呢?想了好久,一度想要写出双链表,看了别人的思路之后才发现可以倒着写,大家如果不懂我为什么说是倒着写,可以画一画这个程序的逻辑,真的很巧妙,我自愧不如,能力还需加强

本次代码的变量命名依然狗血,一股不专业的气息扑面而来…内个show函数只是我用来测试函数是否正确的,大家不用在意

接下来贴代码:

#include<iostream>
using namespace std;
typedef struct Stack *stack;
typedef struct Fnode *fnode;
struct Stack{
	int data;
	stack next;
};
struct Fnode{
	stack top;
};
fnode creat(){
	fnode p = (fnode)malloc(sizeof(Fnode));
	p ->top = NULL;
	return p;
}
int isEmpty(fnode p){
	if(p ->top == NULL)
		return 1;
	return 0;
}
void push(int x, fnode p){
	stack s = (stack)malloc(sizeof(Stack));
	s ->data = x;
	s ->next = p ->top;
	p ->top = s;
}
int pop(fnode p){
	if(isEmpty(p)){
		cout << "堆栈已空" << endl;
		return NULL;
	}
	stack s = p ->top;
	p ->top = p ->top ->next;
	int a = s ->data;
	free(s);
	return a;
}
void show(fnode p){
	if(isEmpty(p)){
		cout << "堆栈已空" << endl;
		return;
	}
	stack s = p ->top;
	while(s){
		cout << s ->data << endl;
		s = s ->next;
	}
	free(s);
}
void main(){
	fnode p = creat();
	push(2, p);
	push(3, p);
	push(6, p);
	show(p);
	cout << endl;
	pop(p);
	show(p);
	cout << endl;
	pop(p);
	show(p);
	cout << endl;
	pop(p);
	show(p);
	cout << endl;
	system("pause");
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值