《信息学奥赛课课通(C++)》第8单元 指针.ppt

《信息学奥赛课课通(C++)》第8单元 指针.ppt

  1. 1、本文档共78页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(1)链表的建立——尾插法 (2)链表的遍历 链表的遍历就是从链表的头结点 head 开始,依次访问每一个元素,直到链表尾部,包括查找、输出等操作。 如果已经创建了一个链表,如何查找其中是否有给定的元素 x 呢?只需要从头结点开始扫描,如果当前结点数据域的值等于 x,那么就表示找到了 x,如果到达链表尾部还没有找到,则链表中没有 x 这个元素。同样,链表的输出也是从头结点开始一个一个输出,直到链表尾部结束。 (3)链表的插入 链表的插入就是在链表给定位置插入一个新结点。如图 8.5-3 所示,就是在链表数据域值为 4 和 9 的两个结点中间插入一个数据域值为 7 的结点。如果在表头表尾插入结点要特殊处理。 (4)链表的删除 链表的删除就是删除链表中的某一个元素,如图 8.5-4 所示,就是要删除链表中数据域值为7 的结点。如果删除头结点要特殊处理。 例1、陶陶摘苹果 【问题描述】 陶陶家的院子里有一棵苹果树,秋天树上会结 10 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知 10 个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。 【输入格式】 第 1 行包含 10 个 100~200 之间(包括 100 和 200)的正整数(以厘米为单位)分别表示 10个苹果到地面的高度,两个相邻的正整数之间用一个空格隔开。 第 2 行只包括一个 100~120 之间(包含 100 和 120)的正整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。 【输出格式】 一行一个整数,表示陶陶能够摘到的苹果的数目。 【输入样例】 100 200 150 140 129 134 167 198 200 111 110 【输出样例】 5 【问题分析】 定义一个一维数组记录 10 个苹果的高度,如果陶陶手伸直能够到的高度加上 30 大于或等于苹果的高度,那么这个苹果就会掉下来,则能摘到的苹果数就加一。 可以用动态存储实现本题。 //p8-5-1 #includeiostream #includecstdio using namespace std; int a[11]; int main(){ freopen( “ apple.in ” , ” r ” ,stdin); freopen( “ apple.out ” , ” w ” ,stdout); int *p; int s = 0; p = a; for(int i = 0; i 10; i++){ cin *p; p++; } p = new(int); cin *p; for(int i =0; i 10; i++) if(a[i] = *p + 30) s++; cout s endl; return 0; } 建议跟踪程序,体会过程。 例2、插入排序 【问题描述】 给出一个整数 x 和一个数列,这个数列保证从小到大排列。现在要求将这个整数 x 插入到数列中,使新的数列仍然从小到大排列。 【输入格式】 第 1 行 1 个整数 n,表示数列中数的个数。 第 2 行 n 个整数,之间用一个空格隔开,保证从小到大。 第 3 行 1 个整数 x,表示等待插入的整数。 【输出格式】 一行整数,表示新的数列。每两个数之间用一个空格隔开。 【输入样例】 4 1 3 4 5 2 【输出样例】 1 2 3 4 5 【问题分析】 由于题目中并没有明确 n 的范围,所以定义一个动态链表。从头结点开始扫描链表,找到第一个大于或等于要插入数字的位置,就把要插入的数字插在这个位置的前面。如果没有找到比插入数大或者与其相等的,则插在链表的尾部。 具体程序和说明参见教材311页-312页。 例3、夏令营旗手 【问题描述】 一年一度的省“信息与未来”小学生夏令营活动又开始了。同往年一样,组织者又设计安排了许多有趣的活动,其中第一项依然是挑选本次夏令营的旗手。由于这是一个非常具有荣誉感的角色,所以报名参加夏令营旗手角逐的营员仍然非常多,营委会于是规定:将 N 个人排成一排,编号 1~N。从第 1 人开始进行 1~M 正向报数,报到 M 的人出列,再从下一个人开始继续1~M 报数、出列。(注意:按某个方向报数报到尾部时,再反方向继续报数)。如此进行下去,直到剩下一人为止,这个人就是本次夏令营的旗手。小明非常渴望能成为旗手,请编一个程序帮助他

您可能关注的文档

文档评论(0)

一壶清茶 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档