大年初四,春雨绵绵,闲着在家实在没有什么事,这个年纪好多小伙伴都玩不起来啦,于是我想到了学习,学习,大概这个号忘了几年的密码,才想起来,发现还是特么学习好晚,好打发时间。。。
上午,一家人坐在沙发前,看江西卫视的天龙八部,记得第一次看时还是在小学的时候,那个时候可好看啦,要是现在看书有那个时候有劲就好啦。。。233 因为马上要找工作,以前看的数据结构,连概念都不知道啦,从头再来,从入门到放弃系列。。。从定义开始。。。
栈stack):只允许在一端进行插入或删除操作的线性表。首先栈是一种线性表,但是限定这种线性表只能在某一端进行插入和删除操作。
栈的基本操作:
InitStack(&S):初始化一个空栈S
StackEmpty(S):判断一个栈是否为空,若S为空返回true,否则返回false
Push(&S,&x):进栈,若栈S未满,将x加入使之成为新栈顶
Pop(&S,&x):出栈,若栈S非空,弹出栈顶元素,并用x返回
GetTop(S,&x):读栈顶元素,若栈S非空,用x返回栈顶元素
ClearStack(&S):销毁栈,并释放栈S占用的存储空间
1.顺序栈的实现
栈的顺序存储称为顺序栈,它是利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针指示当前栈顶的位置
#define MaxSize 50 typedef struct { Elemtype data [MaxSize]; int top; } SqStack;
栈空条件:S.top==-1; 栈满条件:S.top==MaxSize-1; 栈长:S.top+1
顺序栈的基本运算
初始化
void InitStack(&S) { s.top=-1; }
判断空
bool StackEmpty(S) { if(s.top==-1) return true; else return false; }
进栈
bool Push(SqStack &S, ElemType x) { if(S.top==MaxSize-1) return false; S.data[++S.top]=x; return true; }
出栈
bool Pop(SqStack &S,ElemType &x) { if(S.top==-1) return false; x=S.data[S.top--]; return true; }
读栈顶元素
bool GetTop(SqStack S,ElemType &x) { if(S.top==-1) return false; x=S.data[S.top]; return true; }
栈的链式存储结构
采用链式储存的栈称为链栈,链栈的优点是便于多个栈共享储存空间和提高其效率,且不存在栈满上溢的情况。通常采用单链表实现,并规定所有操作都是在单链表的表头进行的
typedef struct Linknode { ElemType data; struct Linknode *next; } *LiStack;
原文地址:https://www.cnblogs.com/yitian09/p/10356675.html