欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    软考软件设计师专题九数据结构知识.docx

    • 资源ID:7753694       资源大小:257.59KB        全文页数:55页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    软考软件设计师专题九数据结构知识.docx

    1、软考软件设计师专题九数据结构知识专题九:数据结构知识数据结构是计算机软件的一门基础课程,计算机科学各个领域及有关的应用软件都要用到各种数据结构语言编译要使用栈、散列表及语法树;操作系统中用队列、存储管理表及目录树等;数据库系统运用线性表、多链表及索引树等进行数据管理;而在人工智能领域,依求解问题性质的差异将涉及到各种不同的数据结构,如广义表、集合、搜索树及各种有向图等等。学习数据结构目的是要熟悉一些最常用的数据结构,明确数据结构内在的逻辑关系,知道它们在计算机中的存储表示,并结合各种典型应用说明它们在进行各种操作时的动态性质及实际的执行算法,进一步提高软件计和编程水平。通过对不同存储结构和相应

    2、算法的对比,增强我们根据求解问题的性质选择合理的数据结构,并将问题求解算法的空间、时间及复杂性控制在一定范围的能力。软件设计师考试大纲对数据结构部分的要求是熟练掌握常用数据结构和常用算法,因此,本专题从数据结构的概述出发,对基本的概念引出常用的数据结构类型的介绍和讲解,同时在讲解各种数据结构中间采用算法与数据结构相结合的方式,在算法步骤中使用数据结构,对数据结构的重点、难点进行了分析,最后讲解了与数据结构紧密相关的排序和查找算法,以及一些以往考试卷的分析。1. 数据结构概述数据结构研究了计算机需要处理的数据对象和对象之间的关系;刻画了应用中涉及到的数据的逻辑组织;也描述了数据在计算机中如何存储

    3、、传送、转换。学习数据结构注意的问题: 系统掌握基本数据结构的特点及其不同实现。 了解并掌握各种数据结构上主要操作的实现及其性能时间、空间)的分析。 掌握各种数据结构的使用特性,在算法设计中能够进行选择。 掌握常用的递归、回溯、迭代、递推等方法的设计 掌握自顶向下、逐步求精的程序设计方法。 掌握自顶向下、逐步求精的程序设计方法。在学习数据结构的知识之前,我们要了解一下数据结构中的基本概念。数据:对客观事物的符号表示,在计算机中就是指所有能输入到计算机中并被计算机程序所处理的符号的总称。数据项:是数据的不可分割的最小单位;数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行处理;一个数

    4、据元素可由若干个数据项组成。数据对象:是性质相同的数据元素的集合,是数据的一个子集。数据结构上的基本操作:插入操作 删除操作 更新操作 查找操作 排序操作数据结构是指数据对象及相互关系和构造方法,一个数据结构B形式上可以用一个二元组表示为B=A,R)。其中,A是数据结构中的数据称为结点)的非空有限集合,R是定义在A上的关系的非空有限集合。根据数据元素之间的关系的不同特性,通常有下列4类基本结构。 集合结构中的数据元素除了“同属于一个集合”的关系外,别无其他关系。 线性结构结构中的数据元素之间存在一个对一个的关系。 树形结构结构中的元素之间存在一个对多个的关系。 图状结构或网状结构结构中的元素之

    5、间存在多个对多个的关系。数据结构中,结点与结点间的相互关系是数据的逻辑结构。数据结构在计算机中的表示又称为映象)称为数据的物理结构,也称存储结构。数据元素之间的关系在计算机中有两种不同的表示方式:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。任何一个算法的设计取决于选定的数据逻辑)结构,而算法的实现依赖于采用的存储结构。数据的逻辑结构分为两类: 线性结构:线性表、栈、队列和串 非线性结构:树、图数据的存储方法有四类:顺序存储方法链接存储方法索引存储方法散列存储方法2. 常用数据结构2.1线性表在数据结构中,线性结构常称为线性表,是最简单、最常用的一种数据结构,

    6、它是由n个相同数据类型的结点组成的有限序列。其特点是:在数据元素的非空有限集合中, 存在唯一的一个被称做“第一个”的数据元素 存在唯一的一个被称做“最后一个”的元素数据元素 除第一个之外,集合中的每个数据元素均只有一个前驱 除最后一个之外,集合中每个数据元素均只有一个后继 一个由n个结点e0,e1,en-1组成的线性表记为:e0,e1,en-1)。线性表的结点个数称为线性表的长度,长度为0的线性表称为空的线性表,简称空表。对于非空线性表,e0是线性表的第一个结点,en-1是线性表的最后一个结点。线性表的结点构成了一个序列,对序列中两个相邻结点ei和ei-1,称前者是后者的前驱结点,后者是前者的

    7、后继结点。线性表最重要的性质是线性表中结点和相对位置是确定的。 线性表的结点也称为表元,或称为记录,要求线性表的结点一定是同一类型的数据。线性表的结点可由若干个成分组成,其中唯一标识表元的成分成为关键字,简称键。 线性表是一个相当灵活的数据结构,它的长度可以根据需要增长或缩短。对线性表的基本运算如下: INITIATEL)初始化操作 LENGTHL) 求长度函数 GETL,i) 取元素函数 PRIORL,elm)求前驱函数 NEXTL,elm) 求后继函数 LOCATEL,x) 定位函数 INSERTL,i,b)插入操作 DELETEL,i) 删除操作有多种存储方式能将线性表存储在计算机内,其

    8、中最常用的是顺序存储和链接存储。根据存储方式的不同,其上述的运算实现也不一样。 顺序存储:是最简单的存储方式,其特点是逻辑关系上相邻的两个元素在物理位置上也相邻。通常使用一个足够大的数组,从数组的第一个元素开始,将线性表的结点依次存储在数组中。顺序存储方式优点:能直接访问线性表中的任意结点。线性表的第i个元素ai的存储位置可以使用以下公式求得:LOCai)=LOCa1)+i-1)*l式中LOC 线性表的大小固定,浪费大量的存储空间,不利于节点的增加和减少;2 执行线性表的插入和删除操作要移动其他元素,不够方便;链式存储线性表链接存储是用链表来存储线性表。单链表由于要存储地址指针,所以浪费空间;

    9、2 直接访问节点不方便;34567循环链表:循环链表是另一种形式的链式存储结构,是单链表的变形。它的特点就是表中最后一个结点的指针域指向头结点,整个链表形成一个环。因此,从表中任意一个结点出发都可以找到表中的其他结点。循环链表和单向链表基本一致,差别仅在于算法中循环的条件不是结点的指针是否为空,而是他们的指针是否等于头指针,循环链表最后一个结点的 link 指针不为 0 (NULL,而是指向了表的前端。为简化操作,在循环链表中往往加入表头结点。循环链表的特点是:只要知道表中某一结点的地址,就可搜寻到所有其他结点的地址。循环链表的示例:带表头结点的循环链表 :双向链表:双向链表是另一种形式的链式

    10、结构,双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前趋。双向链表克服了单链表的单向性的缺点。前驱方向 后继方向双向链表也可以有循环表,链表中存在两个环。一个结点的前趋的后继和该结点的后继的前趋都是指向该结点的。p =plLinkrLink = prLinklLink2.2 栈栈Stack)是限定仅在表尾进行插入或删除操作的线性表。表尾端称栈顶top),表头端称栈底bottom)。若有栈S= return (s-top= =stacksize-1。进栈:void push(seqstack *s,datatype x if (stackfull(serror(“stack ver

    11、flow”。 s-data+s-top=x。判断栈空:int stackempty(seqstack *s return (s-top= = -1出栈:datatype pop(seqstack *sif (stackempty(serror(“stack underflow”。x=s-datatop。s-top-。return (x。链接存储栈:用链表实现的栈,链表第一个元素是栈顶元素,链表的末尾是栈底节点,链表的头指针就是栈顶指针,栈顶指针为空则是空栈。若同时需要两个以上的栈,最好采用链表作存储结构链接存储的栈的操作如下:进栈:Void push(linkstack *p,datatype

    12、 x stacknode *q q=(stacknode*malloc(sizeof(stacknode。 qdata=x。 qnext=ptop。 ptop=q。出栈:Datatype pop(linkstack *p datatype x。 stacknode *q=ptop。 if(stackempty(p error(“stack underflow.”。 x=qdata。 ptop=qnext。 free(q。 return x。多栈处理 栈浮动技术:n 个栈共享一个数组空间Vmn设立栈顶指针数组 t n+1 和 栈底指针数组 b n+1,ti和bi分别指示第 i 个栈的栈顶与栈底,

    13、bn作为控制量,指到数组最高下标各栈初始分配空间 s = m/n指针初始值t0 = b0 = -1bn = m-1ti = bi = bi-1 + s,i = 1, 2, , n-1 2.3队列队列是只允许在一端进行插入,另一端进行删除运算的线性表。允许删除的那一端称为队首front),允许插入运算的另一端称为队尾rear)。通常称队列的结点插入为进队,队列的结点删除为出队。若有队列Q=是进栈函数,形参top是栈顶指针的指针,形参e是入栈元素。int pop(PNODE *top,int oe是出栈函数,形参top是栈顶指针的指针,形参e作为返回出栈元素使用。int enQueue(PNODE

    14、 *tail,int e是入队函数,形参tail是队尾指针的指针,形参e是入队元素。int deQueue(PNODE *tail,int *e是出队函数,形参tail是队尾指针的指针,形参e作为返回出队元素使用。定义结点的结构如下:typedef struct nodeint value。struct node *next。NODE,*PNODE。函数int push(PNODE *top,int ePNODE p = (PNODEmalloc(sizeof(NODE。if(!p return 1。p-value = e。p-next = *top。 /指向栈顶指针*top = p。retu

    15、rn 0。函数int pop(PNODE *top,int *ePNODE p = *top。if(p = NULL return 1。*e = p-value。*top = p-next。 /栈顶指向取出的数的指针free(p。return 0。函数int enQueue(PNODE *tail,int ePNODE p,t;t = *tail。p = (PNODEmalloc(sizeof(NODE;if(!p return l。pvalue = e。pnext = tnext。t-next = p。 /将元素加在尾指针后*tail = p。return 0。函数int deQueue(P

    16、NODE *tail,int ePNODE p,q;if(*tail-next = *tail return 1。/队列已经空p = (*tail-next。 /p获得尾指针q = p-next。e = q-value。p-next = q-next。if(*tail = q *tail = p 。 /尾指针指向最后节点free(q。return 0。循环队列 (Circular Queue:存储队列的数组被当作首尾相接的表处理。队头、队尾指针加1时从maxSize -1直接进到0,可用语言的取模(余数运算实现。队头指针进1:front = (front + 1 % maxSize。队尾指针进

    17、1:rear = (rear + 1 % maxSize。队列初始化:front = rear = 0。队空条件:front = rear。队满条件:(rear + 1 % maxSize = front循环队列的进队和出队:优先级队列:是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素2.4 串字符串是非数值处理应用中重要的处理对象。字符串是由某字符集上的字符所组成的任何有限字符序列。当一个字符串不包含任何字符时,称它为空字符串。一个字符串所包含的有效字符个数称为这个字符串的长度。一个字符串中任一连续的子序列称为该字符串的子串。包含子串的字符串相应称为主串。通常称该字

    18、符在序列中的序号为该字符在串中的位置。字符串的串值必须用单引号括, c1c2c3cn起来,但单引号本身不属于串,它的作用是为了避免于变量名和数的常量混淆。在C语言中,字符串常量是用一对双引号括住若干字符来表示,如“I am a student”字符串通常存于字符数组中,每个字符串最后一个有效字符后跟一个字符串结束符“0”.系统提供的库函数形成的字符串会自动加结束符号,而用户的应用程序中形成的字符串必须由程序自行负责添加字符串结束符号。两个串相等当且仅当两个串的值相等,长度相等并且各个对应位置的字符都相等。常用的字符串的基本操作有7种。 ASSINGs,t)和CREATs,ss)赋值操作 EQU

    19、ALs,t)判等函数 LENGTHs)求长度函数 CONCATs,t)联接函数 SUBSTRs,start,len)求子串函数 INDEXs,t)定位函数 REPLACEs,t,v)置换函数 INSERTs,pos,t)插入函数 DELETE求字符串长,int strlen(char s char *strcpy(char to,char from。 该函数将串from复制到串to中,并且返回一个指向串to的开始处的指针。(3联接(concatenation char strcat(char to,char from 该函数将串from复制到串to的末尾,并且返回一个指向串to的开始处的指针。

    20、(4串比较 int strcmp(chars1,char s2。 该函数比较串s1和串s2的大小,当返回值小于0,等于0或大于0时分别表示s1s2 例如:result=strcmp(“baker”,”Baker” result0 result=strcmp(“12”,”12”。result=0 result=strcmp(“Joe”,”Joseph”。result0 char strchr(char s,char c。 该函数是找c在字符串中第一次出现的位置,若找到则返回该位置,否则返回NULL。字符串的静态存储:顺序存储,用一组地址连续的地址单元存储串的字符序列,特别是在PASCAL程序语言

    21、中还可以采用紧缩数组来实现。字符串的动态存储:采用链表的方式存储字符串,节点的大小可以不同,即每个节点可以存放的字符数是不同的。对于节点大小大于1的链表,需要设置头指针和尾指针来定位和串连接。存储密度:串值所站的存储位/实际分配的存储位 实际应用的串处理系统中采用的是动态存储结构,每个串的值各自存储在一组地址连续的存储单元中,存储地址在程序执行过程中动态分配。利用串名和串值之间的的对应关系来建立存储映象来访问串。2.5 数组数组是最常用的数据结构之一,在程序中,数组常用来实现顺序存储的线性表。数组由固定个数的元素组成,全部元素的类型相同,元素依次顺序存储。每个元素对应一个下标,数组元素按数组名

    22、和元素的下标引用,引用数组元素的下标个数称为数组的维数。在C语言中,n个元素的数组中,第一个元素的下标为0,最后一个的下标为n-1。数组可以分为一维、二维N维数组,取决于引用数组元素的下标的个数;一维数组:二维数组和三维数组:数组可以分为静态数组和动态数组两类,所谓静态就是指数组的空间存储分配是在使用之前还是在程序运行当中分配,静态数组就是在定义时必须进行空间分配,也就是固定数组的大小,这样就不利于数组的扩展。同样动态数组就是在程序运行过程中进行数组的赋值或者是空间的分配,动态数组一般采用链表的存储结构,而静态数组一般采用顺序存储结构。数组元素可以是任何类型的,当元素本身又是数组时,就构成多维

    23、数组。多维数组是一维数组的推广,多维数组中最常用的是二维数组。多维数组的所有元素并未排在一个线性序列里,要顺序存储多维数组按需要按一定次序把所有的数组元素排在一个线性序列里,常用的排列次序有行优先顺序和列优先顺序。对于多维数组,C语言按行优先顺序存放。对于数组,通常只有两种操作: 给定一个下标,存取相应的数据元素 给定一组下标,修改相应数据元素的某一个或几个数据项的值。一般用多维数组表示矩阵,具体有以下几种类型:对称矩阵:Ai,j= =Aj,i三角矩阵:以主对角线划分,三角矩阵有上三角和下三角两种。上三角矩阵中,它的下三角/2中,sak和aij的对应关系是: k =3、对角矩阵 对角矩阵中,所

    24、有的非零元素集中在以主对角线为了中心的带状区域中,即除了主对角线和主对角线相邻两侧的若干条对角线上的元素之外,其余元素皆为零。当i-j1时,元素ai,j=0。LOC(i,j=LOC(0,0+3*i-1+(j-i+1 =LOC(0,0+(2i+j4. 稀疏矩阵简单说,设矩阵A中有s个非零元素,若s远远小于矩阵元素的总数即smn),并且分布没有一定规律。用顺序存储结构的三元组对稀疏矩阵进行存储,分别记录行、列和值十字链表:由于非零元的位置和个数变化,所以用链表存储更恰当;在这种情况下采用十字链表来表示,每个非零元用一个节点表示,节点中有行、列还有向下的域和线右的域;此外还需要一个指向列链表的表头节

    25、点和指向行链表的表头节点。还可以设置一个指向整个十字链表的表头节点。还可以把列表头和行表头节点组成数组,便于操作;各种广义表示意图2.6 树2.6.1概述树型结构是一类重要的非线性数据结构。其中以树和二叉树最为常用,直观看来,树是以分支关系定义的层次结构。树是由一个或多个结点组成的有限集T,它满足以下两个条件:I. 有一个特定的结点,成为根结点II. 其余的结点分成m=0)个互不相交的有限集T0,T1,Tm-1。其中每个集合又都是一棵树,称T0,T1,Tm-1为根结点的子树。这里可以看出树的定义是递归的,即一棵树由子树构成,子树又由更小的子树构成。一个结点的子树数目,称为结点的度。树中各结点的度的最大值则称为树的度。树中结点的最大层次称为树的深度。如果将树中结点的各子树看成从左到右是有次序的即不能交换),则称该树为有


    注意事项

    本文(软考软件设计师专题九数据结构知识.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开