网站设计客户案例,廊坊seo,企业官网建站网站,自动生成代码数据结构与栈 一、概念1. 数据2. 数据结构3. 数据结构分类 二、栈1. 栈2. 相关概念2.1 入栈2.2 出栈2.3 栈的特点2.4 栈顶2.5 栈底2.6 栈顶元素2.7 栈底元素 三、数组模拟栈1. 初始化空栈2. 入栈3. 出栈4. 获取栈顶元素5. 判断栈是否为空6. 获取栈内元素个数 四、栈的运用1. 括… 数据结构与栈 一、概念1. 数据2. 数据结构3. 数据结构分类 二、栈1. 栈2. 相关概念2.1 入栈2.2 出栈2.3 栈的特点2.4 栈顶2.5 栈底2.6 栈顶元素2.7 栈底元素 三、数组模拟栈1. 初始化空栈2. 入栈3. 出栈4. 获取栈顶元素5. 判断栈是否为空6. 获取栈内元素个数 四、栈的运用1. 括号的匹配1.1 审题1.2 参考答案 2. 括号的匹配 2.02.1 审题2.2 参考答案 3. 括号的匹配 3.03.1 审题3.2 参考答案 一、概念
1. 数据 数据就是电脑可以存储的东西例如一段文字、图片、视频、音频等等。 计算机系统中各种字母、数字符号的组合、语音、图形、图像等统称为数据。 计算机科学中数据是指所有能输入到计算机并被计算机程序处理的符号总称。 2. 数据结构 数据结构是计算机存储、组织数据的一个方式是指相互之间存在一种或多种特定关系的数据元素的集合。 3. 数据结构分类 #mermaid-svg-WVePHRJGogVp3HA0 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-WVePHRJGogVp3HA0 .error-icon{fill:#552222;}#mermaid-svg-WVePHRJGogVp3HA0 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WVePHRJGogVp3HA0 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-WVePHRJGogVp3HA0 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WVePHRJGogVp3HA0 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WVePHRJGogVp3HA0 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WVePHRJGogVp3HA0 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WVePHRJGogVp3HA0 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WVePHRJGogVp3HA0 .marker.cross{stroke:#333333;}#mermaid-svg-WVePHRJGogVp3HA0 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WVePHRJGogVp3HA0 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-WVePHRJGogVp3HA0 .cluster-label text{fill:#333;}#mermaid-svg-WVePHRJGogVp3HA0 .cluster-label span{color:#333;}#mermaid-svg-WVePHRJGogVp3HA0 .label text,#mermaid-svg-WVePHRJGogVp3HA0 span{fill:#333;color:#333;}#mermaid-svg-WVePHRJGogVp3HA0 .node rect,#mermaid-svg-WVePHRJGogVp3HA0 .node circle,#mermaid-svg-WVePHRJGogVp3HA0 .node ellipse,#mermaid-svg-WVePHRJGogVp3HA0 .node polygon,#mermaid-svg-WVePHRJGogVp3HA0 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WVePHRJGogVp3HA0 .node .label{text-align:center;}#mermaid-svg-WVePHRJGogVp3HA0 .node.clickable{cursor:pointer;}#mermaid-svg-WVePHRJGogVp3HA0 .arrowheadPath{fill:#333333;}#mermaid-svg-WVePHRJGogVp3HA0 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-WVePHRJGogVp3HA0 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-WVePHRJGogVp3HA0 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-WVePHRJGogVp3HA0 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-WVePHRJGogVp3HA0 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WVePHRJGogVp3HA0 .cluster text{fill:#333;}#mermaid-svg-WVePHRJGogVp3HA0 .cluster span{color:#333;}#mermaid-svg-WVePHRJGogVp3HA0 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-WVePHRJGogVp3HA0 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 数据结构 逻辑结构 非线性结构 集合结构 同属一个集合别无其他关系 树状结构 一对多 图状结构 多对多 线性结构 一对一 物理结构 顺序结构 链式结构 单链表 双链表 循环链表 索引结构 不涉及 散列结构 二、栈
1. 栈 栈是只能在某一端插入和删除的特殊线性表进行删除和插入的一端称作栈顶另一端称作栈底。 2. 相关概念
2.1 入栈 又叫压入把数据装入栈 2.2 出栈 又叫弹出、弹栈把数据从栈取出 2.3 栈的特点 先进后出后进先出 2.4 栈顶 允许进出的一端 2.5 栈底 不允许进出的一端 2.6 栈顶元素 最上方的元素最后入栈的元素 2.7 栈底元素 最下方的元素最先入栈的元素 三、数组模拟栈
1. 初始化空栈 一个栈可以用定义长度为 n 1 n1 n1 的数组 s [ ] s[] s[] 来表示该栈存储 n n n 个元素然后设置指针指向栈顶元素。 const int n 100;
数据类型 s[n1];
int top 0;2. 入栈
void push(数据类型 x)
{if (top n) // 如果栈未满{s[top] x;}// 上溢处理...
}3. 出栈
void pop()
{if (top 0) // 如果不是空栈{top--;}// 下溢处理...
}4. 获取栈顶元素
数据类型 getTop()
{return s[top];
}5. 判断栈是否为空
bool isEmpty()
{return (top 0); // top 0 时是空栈
}6. 获取栈内元素个数
int sizeStack()
{return top;
}四、栈的运用
1. 括号的匹配
1.1 审题
题目描述 假设一个表达式有英文字母小写、运算符 − - − × \times × ÷ \div ÷和左右小圆括号构成以“ ”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配若匹配则返回“YES”否则返回“NO”。假设表达式长度小于 255 255 255左圆括号少于 100 100 100 个。 输入描述 包括一行数据即表达式 输入文件为 bracket.in 输出描述 包括一行即“YES”或“NO” 输出文件为 bracket.out 样例1 输入 2*(xy)/((1-x)*2)输出 YES1.2 参考答案
#include iostream
#include cstdio
using namespace std;char s[105];
char c;
int top;int main()
{freopen(bracket.in, r, stdin);freopen(bracket.out, w, stdout);while (cin c){if (c ){break;}if (c ! ( c ! )){continue;}if (c (){s[top] c;}else{if (top 0){cout NO endl;return 0;}top--;}}if (top 0){cout YES;}else{cout NO;}fclose(stdin);fclose(stdout);return 0;
}2. 括号的匹配 2.0
2.1 审题
题目描述 假设一个表达式有英文字母小写、运算符 − - − × \times × ÷ \div ÷和左右小、中圆括号构成以“ ”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配若匹配则返回“YES”否则返回“NO”。如果中括号在小括号内是不合法的。假设表达式长度小于 255 255 255左圆括号少于 100 100 100 个。 输入描述 包括一行数据即表达式 输入文件为 bracket.in 输出描述 包括一行即“YES”或“NO” 输出文件为 bracket.out 样例1 输入 2*(xy)/([1-x])*2)输出 NO2.2 参考答案
#include iostream
#include cstdio
using namespace std;char s[105];
char c;
int top;int main()
{freopen(bracket.in, r, stdin);freopen(bracket.out, w, stdout);while (cin c){if (c ){break;}if (c (){s[top] c;}else if (c [){if (s[top] (){cout NO;return 0;}else{s[top] c;}}else if (c )){if (s[top] (){top--;}else{cout NO;return 0;}}else if (c ]){if (s[top] [){top--;}else{cout NO;return 0;}}}if (top 0){cout YES;}else{cout NO;}fclose(stdin);fclose(stdout);return 0;
}3. 括号的匹配 3.0
3.1 审题
题目描述 假设一个表达式有英文字母小写、运算符 − - − × \times × ÷ \div ÷和左右小、中、大、尖括号构成以“ ”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配若匹配则返回“YES”否则返回“NO”。合法的括号{[()]}。假设表达式长度小于 255 255 255左圆括号少于 100 100 100 个。 输入描述 包括一行数据即表达式 输入文件为 bracket.in 输出描述 包括一行即“YES”或“NO” 输出文件为 bracket.out 样例1 输入 2*(xy)/([1-x])*2)输出 NO3.2 参考答案
#include iostream
#include cstdio
using namespace std;char s[105];
char c;
int top;int main()
{freopen(bracket.in, r, stdin);freopen(bracket.out, w, stdout);while (cin c){if (c ){break;}if (c ){s[top] c;}else if (c (){if (s[top] ){cout NO;return 0;}else{s[top] c;}}else if (c [){if (s[top] ( || s[top] ){cout NO;return 0;}else{s[top] c;}}else if (c {){if (s[top] ( || s[top] [ || s[top] ){cout NO;return 0;}else{s[top] c;}}else if (c ){if (s[top] ){top--;}else{cout NO;return 0;}}else if (c )){if (s[top] (){top--;}else{cout NO;return 0;}}else if (c ]){if (s[top] [){top--;}else{cout NO;return 0;}}else if (c }){if (s[top] {){top--;}else{cout NO;return 0;}}}if (top 0){cout YES;}else{cout NO;}fclose(stdin);fclose(stdout);return 0;
}