栈的基本概念和顺序实现

目录

一、栈的基本概念

小结:

二、栈顺序实现

共享栈内存:

栈的链式实现

小结:

 下一篇: 队列定义和顺序、链式


一、栈的基本概念

栈(Stack)是只允许在一端进行插入或删除操作的线性表

 

重要元素:栈顶、栈底、空栈

特点:后进先出(LIFO)

 

操作:创建、销毁、增(进栈push)删(出栈pop)、读取(查、只访问栈顶元素)、判空、

 

 

常考题型

进栈顺序和合法出栈

卡特兰数:n个不同元素进栈,出栈元素不同排列的个数为

 

小结:

二、栈顺序实现

#define MaxSize 10
typedef struct{
	int data[MaxSize];//静态数组存放栈中元素
	int top;//栈顶指针 
}SqStack;
//初始化
void InitStack(SqStack &S){
	S.top=-1;//初始化栈顶指针 
} 
//判空
bool StackEmpty(SqStack S){
	return S.top==-1;
} 
bool Push(SqStack &S,int e){
	if(S.top==MaxSize-1)return false;//栈满
	S.top+=1;//指针+1 
	S.data[S.top]=e;//新元素入栈 
	return true; 
}
bool Pop(SqStack &S,int &x){
	if(S.top==-1)return false;//栈空 
	x=S.data[S.top];//栈顶的值赋给x 
	S.top--;//栈顶指针下移 
	return true;
}
bool GetTop(SqStack &S,int &x){
	if(S.top==-1)return -1;
	x=S.data[S.top];
	return true;
} 
//共享栈:当用静态数组实现栈且分配大量空间时
//我们可以使用多个栈共享存储空间的方式
typedef struct{
	int data[MaxSize];
	int top0;//0号栈顶指针 
	int top1;//1号栈顶指针 
}ShStack;
//共享栈初始化
void InitShStack(ShStack &S){
	S.top0=-1;	//初始化栈顶指针 
	S.top1=MaxSize;
} 
//共享栈栈满 
bool ShEmpty(ShStack &S){
	return S.top0+1==S.top1;
}

共享栈内存:

 

栈的链式实现

Push操作:对单链表进行头插法进行插入就是进栈

Pop操作:规定只能对头结点进行后删操作

 

小结:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值