- 2
- 0
- 约4.02千字
- 约 28页
- 2017-11-24 发布于河南
- 举报
10数据结构-栈 队列top-1版本
1.3 栈和队列——特殊线性表 “操作受限”的线性表。 1.3.1 栈 1.3.2 队列 总结 1 栈的定义 栈(Stack):限制在表的一端进行插入和删除运算的线性表,通常称插入、删除的这一端为“栈顶”(Top),另一端为“栈底”(Bottom)。当表中没有元素时称为“空栈”。栈满 假设栈S=(a1,a2,a3,…an),则a1称为栈底元素,an为栈顶元素。栈中元素按a1,a2,a3,…an的次序进栈,退栈的第一个元素应为栈顶元素。 栈的示意图 2 顺序栈及运算 栈的存储:顺序和链式存储。 顺序栈操作示例 顺序栈的定义 因此,顺序栈的类型定义只需将顺序表的类型定义中的长度属性改为top即可。 # define StackSize 100 typedef struct { int data[stacksize]; int top; }seqstack; seqstack *s,sq; 栈的C定义(实现)的理解 设s是SeqStack类型的指针变量。若栈底位置在向量的底端,即s–data[0]是栈底元素。栈顶元素为? 进栈: s-top++;为新栈顶赋值。 退栈: s–data[s-top]出栈;s–top -- 。 s–top=-1表示空栈, s–top =stacksize-1表示栈满。当栈满时再做进栈运算必定产生空间溢出,简称“上溢”。 (1)置空栈 (2)判断栈空 if (s–top==-1) …… (4)进栈 void push(stack *s,int x) { if (栈满) {printf(“stack overflow”); exit(0); s–data[++s–top]=x; /*top加1;赋值; */ } (5)出栈 int pop(stack *s) { if(栈空) {printf(“empty”);exit(0);} x=s–data[top]; s–top--; return(x); } /* 弹出元素,top减1 */ 栈的应用举例 由于栈结构具有的后进先出的固有特性,致使栈成为程序设计中常用的工具。以下是几个栈应用的例子。 数制转换 十进制N和其它进制数的转换是计算机实现计算的基本问题,其解决方法很多,其中一个简单算法基于下列原理: N=(n div d)*d+n mod d ( 其中:div为整除运算,mod为求余运算) 数制转换举例 例如 (1348)10=(2504)8,其运算过程如下: n n div 8 n mod 8 1348 168 4 168 21 0 21 2 5 2 0 2 数制转换算法 void conversion( ) { initstack(s); scanf (“%d”,n); while(n){ push(s,n%8); n=n/8; } while(! Stackempty(s)){ e=pop(s); printf(“%d”,e); } } 括号匹配的检验 假设表达式中充许括号嵌套,则检验括号是否匹配的方法可用“期待的急迫程度”这个概念来描述。例: (()() (())) 1.3.2 队列 队列(一种线性结构)的定义 队列(Queue)也是一种运算受限的线性表。它只允许在表的一端进行插入,而在另一端进行删除。允许删除的一端称为队头(front),允许插入
您可能关注的文档
最近下载
- 重庆市各地方周氏支族源流(1-170支族).doc VIP
- (高清版)B-T 6003.1-2022 试验筛 技术要求和检验 第1部分:金属丝编织网试验筛.pdf VIP
- (已压缩)TUCST007-2020房屋建筑与市政基础设施工程施工安全风险评估技术标准.docx VIP
- 2026年国家公务员考试申论真题及参考答案(考生回忆版).docx VIP
- 部编版语文二年级上册期中常考七大重点题型专项训练.docx VIP
- 机器人操作系统(ROS)及仿真应用 课件全套 第1--9章 Linux Ubuntu入门基础--- 基于ROS的服务机器人应用实例.ppt
- 压疮的预防及护理技术操作考核评分标准编辑.docx VIP
- 高温超导材料在量子计算中的应用前景.docx VIP
- 铺床术操作评分标准.doc VIP
- 2025年陕西高中学业水平合格性考试历史试卷真题(含答案) .pdf VIP
原创力文档

文档评论(0)