10数据结构-栈 队列top-1版本.pptVIP

  • 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),允许插入

文档评论(0)

1亿VIP精品文档

相关文档