数据结构之 顺序栈、共享栈、链栈

一、思维导图:

在这里插入图片描述

**ps:**栈和线性表非常类似,学习过程中可以对比进行学习。

二、栈的定义:

 特殊的线性表。仅在标尾进行插入或删除操作的线性表
 栈顶	=	表尾
 栈底	=	表头
 空栈	=	空表

在这里插入图片描述

三、栈的特点:

LIFO(last in first out)

四、栈的基本操作:

 初始化栈:InitStack(&s)
 销毁栈:DestoryStack(&L)
 进栈:Push(&s,x)
 出栈:Pop(&s,&x)
 读栈顶元素:GetTop(s,&x)
 判空栈:StackEmpty(S)

五、常考题型:

在这里插入图片描述 结论:n个不同元素进栈,出栈元素不同排列的个数为
在这里插入图片描述

六、顺序栈:

1.思维导图:

在这里插入图片描述

2.顺序栈基本操作的实现:

1.定义栈:

#define MaxSize 100

typedef struct{
	int data[MaxSize];	//静态数组存放栈中元素 
	int top;			//栈顶指针 
}SqStack;

2. 初始化栈:InitStack(&s)

**ps:**初始化不同,判空、进栈、出栈判断条件都会不同。当S.top = 0时,小伙伴们自己思考一下

void InitStack(SqStack &S){
	S.top = -1;
} 

3.销毁栈:DestoryStack(&S)

bool DestoryStack(SqStack &S)
{
       S.top = NULL;
       return true;
}

4.进栈:Push(&s,x)

bool Push(SqStack &S,int x){
	if(S.top == MaxSize-1)
		return false;
	//S.data[++S.top] = x;
	S.top = S.top + 1;
	S.data[S.top] = x;
	return true;
	
}

5.出栈:Pop(&s,&x)

bool Pop(SqStack &S,int &x){
	if(S.top == -1)
		return false;
	//x = S.data[S.top--];
	x = S.data[S.top];
	S.top = S.top - 1;
	return true;
}

6.读栈顶元素:GetTop(s,&x)

bool  GetTop(SqStack &S,int &x){
	if(S.top == -1)
		return false;
	x = S.data[S.top];
	return true;
}

7.判空栈:StackEmpty(S)

bool StackEmpty(SqStack S){
	if(S.top == -1)
		return true;
	else
		return false;
}

七、共享栈:

1.共享栈的定义

	俩个栈共享同一片空间

在这里插入图片描述

2.顺序栈基本操作的实现:

1.定义栈:

#define MaxSize 100

typedef struct{
	int data[MaxSize];	//静态数组存放栈中元素 
	int top0;		
	int top1;	
}SqStack;

1.初始化栈:InitStack(&s)

void InitStack(SqStack &S){
	S.top0 = -1;
	S.top1 = MaxSize;
	
} 

2.销毁栈:DestoryStack(&L)

bool DestoryStack(SqStack &S)
{
       S.top0 = NULL;
       S.top1 = NULL;
       return true;
}

3.进栈:Push(&s,x)

//只演示其中一个栈
bool Push(SqStack &S,int x){
	if(S.top0 + 1 == top1)
		return false;
	//S.data[++S.top] = x;
	S.top = S.top + 1;
	S.data[S.top] = x;
	return true;
	
}

4.出栈:Pop(&s,&x)

//只演示其中一个栈
bool Pop(SqStack &S,int &x){
	if(S.top0 == -1)
		return false;
	//x = S.data[S.top--];
	x = S.data[S.top];
	S.top = S.top - 1;
	return true;
}

5.读栈顶元素:GetTop(s,&x)

bool  GetTop(SqStack &S,int &x){
	if(S.top0 == -1)
		return false;
	x = S.data[S.top0];
	return true;
}

八、链栈:

1.思维导图:

在这里插入图片描述

2.链栈基本操作的实现:

1.定义链栈:

typedef struct Linknode{
	int data;
	struct Linknode *next;
} *LiStack;

2.

3.

4.

5.

6.

7.

九、栈的数学性质

n个不同元素进栈,出栈元素不同排列的个数为:1/(n+1)Cn2n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值