数据结构-第3章 栈及队列.pptVIP

  • 2
  • 0
  • 约8.33千字
  • 约 70页
  • 2017-06-18 发布于湖北
  • 举报
约瑟夫环(顺序栈): Shili\JOESPH-seqlist.CPP 用栈实现十进制数转换成其他进制数 用栈数制转换.CPP (7) 取栈顶元素GetTop(s) 在栈不为空的条件下,将头结点后继数据结点的数据域赋给e。对应算法如下: int GetTop(LiStack *s,ElemType e) { if (s-next==NULL) return 0; /*栈空的情况*/ e=s-next-data; return 1; } (8) 显示栈中元素DispStack(s) 从第一个数据结点开始扫描单链表,并输出当前访问结点的数据域值。对应算法如下: void DispStack(LiStack *s) { LiStack *p=s-next; while (p!=NULL) { printf(%c ,p-data); p=p-next; } printf(\n); } 用链栈实现数据反向输出: Shili\P63-linkstack.cpp 约瑟夫环(链栈): Shili\JOSEPHUS-linklist.C 例3.5 假设表达式中允许包含三种括号:圆括号、方括号和大括号。编写一个算法判断表达式中的括号是否正确配对。 解: 设置一个括号栈,扫描表达式:遇到左括号(包括(、[和{)时进栈,遇到右括号时,若栈是相匹配的左括号,则出栈,否则,返回0。 若表达式扫描结束,栈为空,返回1表示括号正确匹配,否则返回0。 int correct(char exp[],int n) { char st[MaxSize]; int top=-1,i=0,tag=1; while (in tag) { if (exp[i]==( || exp[i]==[ || exp[i]=={) /*遇到(、[或{,则将其入栈*/ { top++; st[top]=exp[i]; } if (exp[i]==‘)’) /*遇到‘)’,若栈顶是‘(’,则继 续处 理,否则以不配对返回*/ if (st[top]==() top--; else tag=0; if (exp[i]==‘]’) /*遇到‘]’,若栈顶是‘[’, 则继续处 理,否则以不配对返回*/ if (st[top]==[) top--; else tag=0; if (exp[i]==‘}’) /*遇到‘}’,若栈顶是 ‘{’,则继续处 理,否则以不配对返回*/ if (st[top]=={) top--; else tag=0; i++; } /*表达式扫描完毕*/ if (top-1) tag=0; /*若栈不空,则不配对*/ return(tag); } 3.2 队列 3.2.1 队列的定义 返回 3.2.2 队列的顺序存储结构及其基本运算的实现 3.2.3 队列的链式存储结构及其基本运算的实现 3.2.4 队列的应用例子 队列简称队,它也是一种运算受限的线性表,其限制仅允许在表的一端进行插入,而在表的另一端进行删除。 我们把进行插入的一端称做队尾(rear),进行删除的一端称做队首(front)。 向队列中插入新元素称为进队或入队,新元素进队后就成为新的队尾元素;从队列中删除元素称为出队或离队,元素出队后,其后继元素就成为队首元素。 3.2.1 队列的定义 队列的入队和出队操作示意图 3.2.2 队列的顺序存储结构及其基本运算的实现 假设队列的元素个数最大不超过整数MaxSize,所有的元素

文档评论(0)

1亿VIP精品文档

相关文档