数据结构课件 第3章 栈.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
福州大学数学与计算机科学学院 第三章 栈 栈是一种特殊的线性表,是操作受限的线性表,称其为限 定性数据结构。 3.1 ADT栈(stack) 栈的定义和特点 定义:限定仅在表首进行插入或删除操作的线性表,表首—栈顶,表尾—栈底,不含元素的空表称空栈 特点:先进后出(FILO)或后进先出(LIFO) 3.1 ADT栈(stack) 3.1 ADT栈(Stack) ADT栈上定义的常用的基本运算 Empty( ): 判断栈空 Full( ):判断栈满 (3) Top( ): 返回栈顶元素 (4) Push(x):将元素x入栈 (5) Pop(x):出栈,并将栈顶元素存入x中 栈应用的简单例子 程序编译时的表达式或字符串的括号匹配问题。 例如,算术表达式(x*(x+y)-z),其中位置1和4处有左括号,而位置8和11处有右括号,满足配对要求。 但算术表达式 (x+y)*z)( ,其中位置8处的右括号没有可与之配对的左括号,而位置9处的左括号没有可与之配对的右号。这里要在栈的基本运算的基础上定义算术表达式(字符串) expr中的圆括号配对检查运算 void Parenthesis(char *expr) 栈的存储结构 顺序栈 实现:一维数组s[M] 1. 用数组实现的栈的特征数据及其类型 栈的元素的类型:T 数组能容纳的栈元素的最大个数: MaxTop 存放栈的数组:T *stack 栈的栈顶元素所在数组分量的下标: Top 约定空栈时Top为-1 约定栈底在stack[0] 2. 模板类Stack T的定义 templateclass T class Stack { public: Stack(int Max = 10); ~Stack( ) {delete [ ] stack;} bool Empty( ) const {return top == -1;} bool Full( ) const {return top = = MaxTop;} T Top( ) const; StackT Push(const T x); StackT Pop(T x); private: int top; //栈的栈顶元素所在数组分量的下标 int MaxTop; //数组能容纳的栈元素的最大个数 T *stack; // 栈元素数组 }; 入栈算法 3. 两个栈共用一个数组的实现 2个栈共享一个数组stack[0..n] 利用栈底位置不变的特性,可以将2个栈的栈底分别设在数组stack的两端。然后各自向数组stack的中间伸展,如图所示。 4. 链栈—用指针实现栈 等价类划分问题 3.4.1 问题的提出 给定集合S及一系列形如“x等价于y”的等价性条件,要求给出S的满足所列等价性条件的等价类划分。其中x和y是S中的元素。 复习: (1)集合上的等价关系和集合关于某一等价 关系的等价类划分等概念; (2)举出3个你熟悉的等价关系和等价类划分。 3.4.2 问题涉及的对象的数学化及问题的改述 我们总可以用整数来表示集合中的元素。因此,如果集合S中 共有n个元素,则可将集合S表示为{1,2,…,n},而元 素i和j的等价性条件可表示为i≡j,1?i,j?n。 这样,问题可一般地表述为:已知S= {1,2,…,n}上的 一个等价关系由 r 个等价性条件{it≡jt, 1?it,jt?n, t=1,2,3,…,r} 来表示。 要求该等价关系所确定的等价类划分。 3.4.3 举例 给定集合 S ={1,2,…,7},及等价性条件:1≡2, 5≡6,3≡4,1≡4。则集合S的等价类划分如下:首先 将S的每一个元素看成一个等价类。然后顺序地处理所 给的等价性条件。每处理一个等价性条件,就得到一 个相应的等价类划分: 1≡2 {1,2}{3}{4}{5}{6}{7}; 5≡6 {1,2}{3}{4}{5,6}{7}; 3≡4 {1,2}{3,4}{5,6}{7}; 1≡4 {1,2,3,4}{5,6}{7}。 最终所得到的集合S的等价类划分为:{1,2,3,4}{5,6}{7}。 3.4.4 问题的求解算法 void main(void) {int n, r; cout “输入集合中元素的个数 endl; cin n; if (n 2) {cerr “集合中元素的个数太少 endl; exit(1);} cout “输入等价性条件的个数 endl; cin r;

文档评论(0)

柳风飘香 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档