数据结构第四章、栈.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构第四章、栈

第四章 栈、队列和哈希表 一、栈 栈的类型定义 Stack类简介 栈的应用举例 栈的定义 栈可以看成一种“特殊的”线性表,是限定仅在表尾(top)进行插入或删除操作的线性表。 允许插入和删除的一端称为栈顶(top,表尾),另一端称为栈底(bottom,表头) 特点:后进先出 (LIFO) 栈的抽象数据类型的定义 ADT Stack { 数据对象:D = {ai | ai∈ElemSet, i=1,2,3,…,n} 数据关系:R = {ai-1, ai | ai-1,ai∈D} 基本操作:Stack( ) // 初始化新栈 Push( ) // 进栈 Pop( ) // 出栈 Peek( ) // 取栈顶元素值 Clear( ) // 清空栈 Contains( ) // 确定某元素是否在栈中   } ADT Stack 基本操作的实现 //入栈 public void Push(T item) { if(IsFull()) { Console.WriteLine(Stack is full); return; } data[++top] = item; } //出栈 public T Pop() { T tmp = default(T); if (IsEmpty()) { Console.WriteLine(Stack is empty); return tmp; } tmp = data[top]; --top; return tmp; } Stack类 表示对象的简单的后进先出非泛型集合。 命名空间: ?System.Collections 参考文献地址: / 栈的应用举例 ——例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 public void Conversion(int n) { Stack s = new Stack(); while(n 0) { s.Push(n%8); n = n/8; } while(!s.IsEmpty()) { n = s.Pop(); Console.WriteLine(“{0}”, n); } } 例2,表达式求值 在机器内部,任何一个表达式都是由操作数、运算符和界限符组成。操作数和运算符是表达式的主要部分,分界符标志了一个表达式的结束。根据表达式的类型,表达式分为三类,即算术表达式、关系表达式和逻辑表达式。为简化问题,我们仅讨论四则算术运算表达式,并且假设一个算术表达式中只包含加、减、乘、除、左圆括号和右圆括号等符号,并假设‘#’是界限符。 算术表达式的两种表示 ——中缀表达式 运算符在两个操作数中间的表达式 如:12+(2+5*4) /2 - 5 问题:既要考虑括号的作用,又要考虑运算符的优先级,还要

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档