https://blog.csdn.net/zichen_ziqi/article/details/80807989
一种可以实现“先进后出”的存储结构。
1.静态栈必须提前确定栈的大小(有限的),并且都是连续的.;动态栈可以无限大小(内存够的情况下),并且是不连续的.
2**.静态栈可以复用顺序表的代码;动态栈可以复用单链表**的代码。
选择线性表的尾部(头部)作为栈顶,也就是说只能允许在这一端进行操作;相应的在进行出栈操作时也是从线性表的尾部(头部)开始。
元素之间不连续
出栈:栈的删除操作
压栈:进栈,栈的插入操作
头文件: #include< stack > 。定义:stack< int > s;
s.empty(); //如果栈为空则返回true, 否则返回false;
s.size(); //返回栈中元素的个数
s.top(); //返回栈顶元素, 但不删除该元素
s.pop(); //弹出栈顶元素, 但不返回其值
s.push(); //将元素压入栈顶
先定义一个节点数据类型结构体,里面有节点值和下一个节点地址两个成员。
再定义栈的结构体,里面有一个栈顶节点(指向栈顶元素),一个栈尾节点(指向栈尾元素的下一个没有实际含义的)。
初始化 initStack(PSTACK)
栈的插入
栈的遍历输出
栈的删除
栈的清空
定义栈结构体变量,并不意味着栈已经创建好了。此时该对象指向的是垃圾值,
需要对其初始化(栈尾和栈头指向同一个没有实际含义的节点(栈尾的下一个))。
造出一个空栈。
参数:栈指针对象(普通栈对象取地址)
步骤:
通过malloc函数动态创建这个空间;
栈首等于栈尾;
栈首的下个节点的地址为空。
参数:栈指针对象(普通栈对象取地址)、新节点的数据值
步骤:
动态创建一个节点,数据域是数据值,指针域指向原来的栈首。栈首指针域指向新节点。
参数:栈指针对象(普通栈对象取地址)
步骤:
定义一个指针节点为栈首
当该节点不为栈尾节点时,输出当前节点数据值。循环输出。
作用:出栈一次,把要出栈的元素存入 pVal形参指向的变量。成功,返回该变量值。失败 false.
步骤:
判断是否为空栈
定义一个节点指向ptop,
ptop指向该栈顶节点的下一位
释放 该节点
赋空该节点
测试:
功能:清空栈
步骤:判断是否为空栈
定义两个节点p、q,初始一个p指向栈顶,一个q初始为空,即将指向栈顶的下一个节点。
当p!=栈尾,q指向p的下一个节点。释放p。p等于q。