链表,栈,队列手写实现(非指针)

有错误恳请指正

前言

STL的容器固然好,但有些简单的栈,队列,链表因为STL里面好像是要动态申请内存,于是便有点慢,并且自己手写还可以加入自己想要的功能,不用受制于STL。如:想将栈顶的两个值变为一个乘积,用STL只能将两个依次出栈,用两个变量记录值,然后相乘在入栈,很麻烦,而手写栈只需要2行搞定。

模板:

双向链表

struct node{
	int val; //值
	int nxt; //当前节点的后继
	int pre; //当前节点的前驱
}list[N];

队列

struct Que{
	int que[N],h=1,t=0;//这里h=1,t=0主要是为了方便循环链表
	bool empty(){
		return h<=t;
	}
	int size(){
		return t-h+1;
	}
	void clear(){
		h=1,t=0;
	}
	void push(int x){
		sta[++t]=x;
	}
	int top(){
		return sta[t];
	}
	int bot(){
		return sta[h];
	}
	void pop(){
		++h;
	}
};

struct Sta{
	int sta[N],top=0;
	bool empty(){
		return top > 0 ? 1 : 0;//三目运算符,就是逻辑运算 ? 成立 : 不成立
	}
	int size(){
		return top;
	}
	void clear(){
		top=0;
	}
	void push(int x){
		sta[++top]=x;
	}
	int top(){
		return sta[top];
	}
	void pop(){
		--top;
	}
};

心得

封装函数大法好,想要什么理解了自己加。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值