数据结构——栈

数据结构——栈

栈的基本概述

1.栈的定义:栈是一个操作受限的线性表,只允许在表的一端进行插入和删除的线性表。
2.栈的特点:先进后出,后进先出
3.栈顶:在表中允许进行插入和删除的一端
4.栈底:在表中固定不动的一端
5.进栈:又称压栈,栈的插入操作
6.出栈:又称弹栈,栈的删除操作

进栈和出栈有几种可能:在这里插入图片描述

栈的顺序存储结构又称为顺序栈,顺序栈通常由一个一维数组和一个记录栈顶元素位置的变量

1.创建顺序栈

#define MAX 最大容量
Create_Ss(Ss,Ss_top,Ss_max){
element Ss[MAX];
Ss_max=MAX;
Ss_top=-1;
return OK;
}

注:在非空栈中,栈顶指针始终在栈顶元素位置上

2.判栈空操作

status emply_Ss(Ss_top){
if(Ss_top==-1)		//判断栈空条件
	return TRUE;
else
	return FALSE;
}

3.取栈顶元素

bool GetTop(SqStack S,ElemType &x){
	if(S.top==-1){			//栈空
		printf("空栈");
		return false;
	}else
		x=S.data[S.top];			//x记录栈顶元素
	return true;
}

4.入栈操作

先移动指针,再进行赋值

入栈操作时间复杂度:O(1)

//入栈操作核心代码
++top;
s[top]=x;
或者
s[++top]=x;

栈满条件

Ss_top==MAXSIZE-1;

数据结构——栈_第1张图片

入栈代码

pus_Ss(Ss,Ss_top,Ss_max,x){
	if(Ss_top>=Ss_MAXSIZE-1)		//判断栈满
		return ERROR;
	else{
		Ss_top++;					//入栈操作
		Ss[Ss_top]=x;
	}
	return OK;
}

5.出栈操作

先赋值,再减减

出栈操作时间复杂度:O(1)

//出栈操作核心代码
x=S[top];
top--;
或者
x=S[top--];

数据结构——栈_第2张图片

出栈操作程序代码

bool Pop(SqStack &S,ElemType &x){
	if(S.top==-1)
		return false;
	x=S.data[S.top--];			//先出栈,指针再减1
	return true;
}

6.对顺序栈进行遍历程序代码

Display_Ss(Ss,Ss_top){
	i=s_top;
	for(i;i>=0;i--)
	printf("%d",s[i]);
}

总结

顺序栈四要素

栈空:S_top==-1;
栈满:S_top==MASIZE-1;
进栈操作:S_top++;	S[S_top]=x; 或 S[++top]=x;
出栈操作:x=S[top];	S_top--; 或 x=S[top--];

栈的链式存储结构

出入栈操作的时间复杂度为O(n)

链栈定义

typedef struct Stacknode{
	elemtype data;
	struct Stacknode *next;
}slStacktype;

链栈插入

核心代码
p=(node*)malloc(sizeof(node*));
p->data=x;
p->next=top;
top=p;

出栈

status pop(slStacktype &top,elemtype &x){
	slStacktype *p;
	if(top==NULL)
		return NULL;
	else{
		p=top;
		top=top->next;
		x=p->data;
		free(p);
		return OK;
	}
}

链栈三要素

栈空:top==NULL;
进栈:P->next=top; top=p;
出栈:top=top->next; free(q);

你可能感兴趣的:(数据结构,数据结构)