受限线性表---栈(TOPIC Five)

宝剑锋从磨砺出,梅花香自苦寒来

一. 一些基本概念

(1):首先提到栈最先想到的就是它是一种后进先出LIFO(先进后出FILO)的线性表,栈规定只能在线性表的尾部进行插入和删除元素操作。栈的尾部称作栈顶(top),相应的表头成为栈底(bottom)。数据入栈是从栈顶插入(push),同样出栈也是从栈顶取出(pop)。下面定义一个栈的顺序存储框架:

//定义顺序栈
typedef struct SEQSTACK{
	void* data[Max];
	int stacksize;
}SeqStack;

接着定义一个栈的链式存储框架:

//定义链表栈节点
typedef struct LINKNODE{
	void* data;
	struct LINKNODE* next;
}LinkNode;
//定义链表栈
typedef struct LINKSTACK{
	LinkNode node;
	int stacksize;
}LinkStack;

二. 代码实现

1. 栈的初始化

//初始化栈
SeqStack* Init_SeqStack(){
	SeqStack* stack = (SeqStack*)malloc(sizeof(SeqStack));
	for(int i = 0; i < Max; i++){
		stack -> data[i] = NULL;
	}
	stack -> stacksize = 0;
	return stack;
}

2. 入栈

//入栈
void Push_SeqStack(SeqStack* stack, void* data){
	//如果数据为空返回
	if (data == NULL){
		return;
	}
	//如果栈满则追加空间
	if (stack -> stacksize == Max){
		SeqStack* stack = (SeqStack*)realloc(SeqStack* stack, (stack -> stacksize + INCREMENTSIZE) * sizeof(void*));
		for(int i = 0; i < Max + INCREMENTSIZE; i++){
			stack -> data[i] = NULL;
		}
		stack -> stacksize = stack -> (stacksize + INCREMENTSIZE);
	}
	stack -> data[stack -> stackszie] = data;
	stack -> stacksize++;
}

3. 出栈

//出栈
void Pop_SeqStack(SeqStack* stack){
	if (stack == NULL){
		return NULL;
	}
	if (stack -> stacksize == 0){
		return;
	}
	stack -> data[stack -> (stacksize - 1)] = NULL;
	stack -> stacksize--;
}

4. 常用函数

#include <stack> 	//引入的头文件
stack<char> st;

st.empty() 堆栈为空则返回真

st.pop() 移除栈顶元素

st.push() 在栈顶增加元素

st.size() 返回栈中元素数目

st.top() 返回栈顶元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值