7.7基本数据结构及常见STL.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ACM暑期培训 主要内容 原理不重点讲,着重介绍数据结构在ICPC中的应用和实现,包括如何用STL实现。 主要内容:数组(Array),向量(Vector,少用),,栈(Stack),队列(Queue), 数据结构课程的内容 数组 空间分配 连续的地址空间,大小确定 例如: Int arr[4],arr代表数组首地址 可以在常数时间内存取任何一个元素 Vector 头文件 #includevector VectorElem c VectorElem c1(c2) VectorElem c(n) VectorElem c(n,elem) VectorElem c(beg,end) Vector特点 vector可以实现动态增长的数组。 如果题目中能使用数组,尽量使用数组。 因为向量空间如果不够,会重新分配空间,导致时间浪费。 迭代器 向量可以使用下标访问也可以使用迭代器访问,一般较多用于存储空间非连续的容器。 begin() 返回一个迭代器,指向容器起始点,也就是第一元素的位置。 end() 返回一个迭代器,指向容器的结束点。结束点在最后一个元素之后。 例子: vectorint::iterator pos; for(pos=v.begin();pos!=v.end();++pos) cout*pos; ++pos,pos++ 前者效率稍高于后者,因为后者使用时会创建临时变量存储数据。 List 头文件 #includelist 特点:逻辑上连续,空间上不连续。 空间: a1 head a2 /\ an …… 存取数据需要从头开始依次向后访问,需要消耗线性时间,o(n) Stack 头文件 #includestack 栈是一种LIFO(Last In First Out,后进先出)的线性数据结构。 Stack 如果确定了进行操作的一端,对应的可确定栈顶(top)和栈底(bottom)。 栈顶即进行操作的一端。 实现方式:一般用顺序表stack和栈顶指针top来实现 例子: 把一个字符串倒序输出。 符合栈的特点。 Queue 头文件 #includequeue 与栈相反,是FIFO,先进先出的 顺序表的缺点:当出队元素很多时,front之前的空间被浪费了 当出队的元素可以被舍弃时,有两种优化方式:环形队列和链队 例子: 银行业务的模拟。 符合队列的特点。 stack容器的几个方法 stack 入栈 push(); 出栈 pop(); 栈顶 top(); queue容器的几个方法 queue 入队 push(); 出队 pop(); 队首 front(); 二者都有的方法 判空 empty(); 元素个数 size(); STL中的栈和队列 题目 Stack(扩展) 大家可以用栈实现简单的计算器。 ( +,-,*,/,(,)) hint :可以参考大二数据结构书中栈那一章。 Queue(扩展) 广度优先搜索使用队列实现。 Set Map 二者插入元素时会自动排序。 自动排序的主要优点在于使二叉树查找元素时具有良好性能。O(log(n))的查找复杂度。 二者的元素Key值都必须唯一。 平衡二叉树 Set 头文件 #includeset 插入的值不能重复,重复的话等于覆盖。 Set Set Pair(对组) Map的元素类型为Pair,使用Pair来管理其键值/实值(key/value)的成对元素。任何函数需返回两个值,也可以使用Pair。 make_pair(ElemType,ElemType)返回一个pair。 例子: pairint,string t(1,”string”) pairint,string t=make_pair(1,”string”) 可以通过t.first,t.second 访问pair的成员。 Map 头文件 #includemap 类似set,只是多了一个实值value. 元素都是pair类型。 关键字唯一,不能重复,重复的话等于修改。 例子: String(STL) string str=12 23 33 24; istringstream sin(str); int arr[4]; int i=0; while(sinarr[i++]) ; 练习: HDU 1128, 1515, 1972, 1004 , 1002

文档评论(0)

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

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

1亿VIP精品文档

相关文档