栈的基本概念和顺序实现

目录

一、栈的基本概念

小结:

二、栈顺序实现

共享栈内存:

栈的链式实现

小结:

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


一、栈的基本概念

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

 

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

扫描二维码关注公众号,回复: 13146230 查看本文章

特点:后进先出(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操作:规定只能对头结点进行后删操作

 

小结:

猜你喜欢

转载自blog.csdn.net/weixin_46919419/article/details/114379590