数据结构——栈
- 栈(stack),它是一种运算受限的线性表,后进先出(LIFO)。栈限定仅在表尾(栈顶)进行插入或者删除。
- 栈的定义和初始化
typedef struct{
SDataNode *base; //栈底指针
SDataNode *top; //栈顶指针
int StackSize; //当前已经分配的存储空间,以元素为单位
}SdStack;
//初始化顺序栈,构造一个空栈
Status initstack(SdStack &S){
//分配存储空间
S.base = (SDataNode *)malloc(stack_init_size*sizeof(SDataNode));
if(!S.base){
//如果分配失败,则返回error
return OVERFLOW;
}
//S.top 始终指向栈顶元素的下一个位置
S.top = S.base; //初始状态下为空栈
S.StackSize = stack_init_size; //当前已经分配的存储容量为100个
return OK;
}
-
STL中栈的基本操作
C++ 中STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。
1.push(element):添加一个新元素到栈顶位置。
2.pop():移除栈顶的元素,同时返回被移除的元素。
3.size():返回栈里的元素个数。
4.clear():移除栈里的所有元素。
5.empty():判断栈是否为空,如果栈里没有任何元素就返回true,否则返回false。
6.top():返回栈顶的元素,不对栈做任何修改(这个方法不会移除栈顶的元素,仅仅返回它)。 -
基本操作详解
//头文件
#include <stack>
//创建栈类
stack<int> S;
// 栈相关的方法
1.push()
// 压栈操作
for(int i=0;i<8;i++)
S.push(i);
2.pop() ——使用前要先判断栈是否为空
// 出栈操作
if(!S.empty())
S.pop();
3.size()
// 获取栈中元素的个数
cout<<"栈中元素个数为:"<<S.size();
4.clesr()
//删除全部元素
S.clear();
5.empty()
if(S.empty())
{
return true;
}
else
{ return false;}
6.top()
//返回栈顶元素
S.top();
-
题目
1.
答案:C -
A答案: 65进栈, 5出栈, 4进栈出栈, 3进栈出栈, 6出栈, 21进栈,1出栈, 2出栈
-
B答案: 654进栈, 4出栈, 5出栈, 3进栈出栈, 2进栈出栈, 1进栈出栈, 6出栈
-
D答案: 65432进栈, 2出栈, 3出栈, 4出栈, 1进栈出栈, 5出栈, 6出栈
2.表达式括号匹配
表达式括号匹配(洛谷)
3.后缀表达式
后缀表达式(洛谷)