栈
定义:栈是限定仅在表尾进行插入和删除操作的线性表
特性:先进后出,后进先出
应用:递归,回溯问题,和优先级有关的问题
区别:数据结构中的栈和系统中栈的关系
工作原理,一样 先进后出
系统栈,是0-3G内存中的一段(8M),存储函数的调用关系,局部变量,参数,返回地址
数据结构栈,内存空间在堆空间开辟。适用场景更广
- 栈顶:允许操作的一端
- 栈底:不允许操作的一端
- 入栈,出栈
栈的存放方式
- 顺序存储

-
链式存储
-
// 适配器
-
#ifndef LINKSTACK_H
-
#define LINKSTACK_H
-
typedef struct person
-
{
-
char c;
-
int row;
-
int col;
-
} DATATYPE;
-
typedef struct stacknode
-
{
-
DATATYPE data;
-
struct stacknode *next;
-
} LinkStackNode;
-
typedef struct
-
{
-
LinkStackNode *top;
-
int clen;
-
} LinkStack;
-
栈的分类
-
LinkStack* CreateLinkStack();
-
int PushLinkStack(LinkStack*ls,DATATYPE*newdata);
-
int PopLinkStack(LinkStack*ls);
-
DATATYPE* GetTopLinkStack(LinkStack*ls);
-
int GetSizeLinkStack(LinkStack*ls);
-
int IsEmptyLinkStack(LinkStack*ls);
-
int DestroyLinkStack(LinkStack*ls);
-
#endif
栈的分类
- 1 空增栈
- 2 空减栈
- 3 满增栈
- 4 满减栈
- 增栈,新增元素元素后。Top指向的内存地址慢慢变大
- 减栈,新增元素元素后。Top指向的内存地址慢慢变小
- 空栈, top指针指向的地址,是新元素待插入的位置
- 满栈, top指针指向的地址,是最后入栈的元素的位置