网站大量收购独家精品文档,联系QQ:2885784924

国家集训队2006-论文集 朱晨光.doc

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

基本数据结构在信息学竞赛中的应用 安徽省芜湖市第一中学 朱晨光 目 录 摘要 2 关键字 2 正文 2 引言 2 第一部分——基本数据结构的介绍 3 一、线性表..................................................................3 二、栈 5 三、队列......................................................................5 第二部分——基本数据结构的应用 6 一、栈的应用 6 二、线性表的应用 10 三、队列的应用 12 总结 16 参考文献 16 感谢 16 附录 17 摘要 本文介绍了几种基本数据结构(例如线性表、队列)在信息学竞赛中的应用,并通过文中的几道例题集中体现了这些数据结构的重要作用。全文可以分为如下几个部分: 介绍几种常用的基本数据结构; 通过几道例题说明基本数据结构的重要作用; 总结全文并探讨应用基本数据结构在思想上带来的启示。 关键字 基本数据结构 线性表 队列 双向链表 栈 编程复杂度 时间复杂度 辨证关系 螺旋式发展 正文 引言 在当今的信息学竞赛中,各种高难度的题目层出不穷。而与这些题目相伴而来的便是很高的编程复杂度。随着计算机科学的不断进步,有越来越多高效而实用的数据结构应运而生。但是,其惊人的编程复杂度使得我们在比赛时必须小心翼翼,慎之又慎,并且经常因为一个微小的疏漏而导致全盘皆输。 然而,并非所有的题目都只能运用复杂的数据结构加以解决。有些时候,常常被我们忽略的基本数据结构也大有用武之地。灵活地运用基本数据结构,可以使我们在紧张的信息学比赛中赢得宝贵的时间,增加成功的概率。 第一部分——基本数据结构的介绍 其实,这一部分的内容可以在所有介绍数据结构的书中找到,这里只做比较简单的介绍。 线性表 线性表是最常用且最简单的一种数据结构。简言之,一个线性表是n个数据元素的有限序列。对线性表进行的基本操作有如下几种: 1) INITIATE(L) 初始化操作 2) LENGTH(L) 求长度函数 3) GET(L,i) 取元素函数 4) PRIOR(L,element) 求前驱函数 5) NEXT(L,element) 求后继函数 6) LOCATE(L,x) 定位函数 7) INSERT(L,i,b) 前插操作 8) DELETE(L,i) 删除操作 9) EMPTY(L) 判空表操作 10) CLEAR(L) 表置空操作 线性表的顺序存储结构 在计算机内,可以用不同的方式来表示线性表,其中最简单和最常用的方式是用一组地址连续的存储单元依次存储线性表的元素(即我们通常所说的“一维数组”)(如图1)。 应用这种存储结构,可以实现对线性表中任一数据元素的随机存取。所以线性表的顺序存储结构是一种随机存取的存储结构。在Pascal与C语言中可以用一维数组描述之。 可以很容易证明,在线性表的顺序存储结构中,删除与插入任意一个元素的时间复杂度为O(N),而定位一个元素的时间复杂度为O(1). 线性表的链式存储结构 线性链表 线性表的链式存储结构的特点是用一组任意的存储单元存储线性表的数据元素。对于每个数据元素ai来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息。这两部分信息组成数据元素ai的存储映象,称为结点,其中包括存储数据元素信息的数据域和存储直接后继存储位置的指针域(称为指针或链)。n个节点的链组成一个链表,称为线性链表或单链表(如图2)。 其中head为头节点,它的指针域存储第一个元素结点的存储位置。 循环链表 循环链表是另一种形式的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环(如图3)。 双向链表 顾名思义,双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前驱。当然,双向链表也有循环表,其结构如图4所示。 可以很容易证明,在线性表的链式存储结构中,删除与插入任意一个已经定位的元素的时间复杂度为O(1),而定位一个元素的时间复杂度为O(N). 栈 栈是限定仅在表尾进行插入或删除操作的线性表。因此,表尾端称为栈顶,相应地,表头端称为栈底。不含元素的空表称为空栈。 根据图5可以很明显地看出,栈的修改是按后进先出的原则进行的。因此,栈又称后进先出(Last In First Out)的线性表(简称LIFO结构)。 栈的基本操作有: INISTACK(S) 初始化操作 EMPTY(S) 判栈空操作 PUSH(S,x) 入栈操作 POP(S,x) 出栈函数 GETTOP(S) 取栈顶元素函数 CLEAR(S) 栈置空操作 CURR

文档评论(0)

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

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

1亿VIP精品文档

相关文档