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

    数据结构导论自学考试概念整理.docx

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

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

    数据结构导论自学考试概念整理.docx

    1、数据结构导论自学考试概念整理 第 一 章 概论 第 二 章 线 性 表 第 三 章 栈 和 队 列 第 四 章 串 第 五 章 多 维 数 组 第 六 章 树 第 七 章 图 第 八 章 排序 第 九 章 查找第 一 章 概 论 1.数据:信息的载体,能被计算机识别、存储和加工处理。 2.数据元素:数据的基本单位,可由若干个数据项组成,数据项是具有独立含义的最小标识单位。3.数据结构:数据之间的相互关系,即数据的组织形式。 它包括: 1)数据的逻辑结构,从逻辑关系上描述数据,与数据存储无关,独立于计算机; 2)数据的存储结构,是逻辑结构用计算机语言的实现,依赖于计算机语言。 3)数据的运算,定

    2、义在逻辑结构上,每种逻辑结构都有一个运算集合。常用的运算:检索/插入/删除/更新/排序。 4.数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。数据的存储结构是逻辑结构用计算机语言的实现。 5.数据类型:一个值的集合及在值上定义的一组操作的总称。分为:原子类型和结构类型。 6.抽象数据类型:抽象数据的组织和与之相关的操作。优点:将数据和操作封装在一起实现了信息隐藏。 7. 抽象数据类型ADT:是在概念层上描述问题;类:是在实现层上描述问题;在应用层上操作对象(类的实例)解决问题。 8.数据的逻辑结构,简称为数据结构,有: (1)线性结构,若结构是非空集则仅有一个开始和终端结点,并且所有结点

    3、最多只有一个直接前趋和后继。 (2)非线性结构,一个结点可能有多个直接前趋和后继。 9.数据的存储结构有: 1)顺序存储,把逻辑相邻的结点存储在物理上相邻的存储单元内。 2)链接存储,结点间的逻辑关系由附加指针字段表示。 3)索引存储,存储结点信息的同时,建立附加索引表,有稠密索引和稀疏索引。 4)散列存储,按结点的关键字直接计算出存储地址。 10.评价算法的质量: 1正确性;算法应能正确地事先预定的功能。 2易读性;算法应易于阅读和理解,以便于调试和扩充。 3健壮性;当环境发生变化时,算法能适当地做出反应或进行处理,不会产生不需要的运行结果。 4高效率;即达到所需的时间和空间性能。 11.算

    4、法的时间复杂度T(n):是该算法的时间耗费,是求解问题规模n的函数。记为O(n)。 时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2)、线性阶O(n)、线性对数阶O(nlog2)、平方阶O(n2)、立方阶O(n3)、k次方阶O(nk)、指数阶O(2n)。 13.算法的空间复杂度S(n):是该算法的空间耗费,是求解问题规模n的函数。 12.算法的特征:有穷性;确定性;可行性;输入;输出。 13. 决定算法运行时间的因素:(1)问题的规模;(2)编译时间;(3)指令执行速度;(4)重复执行指令的速度。 第 二 章 线 性 表 1.线性表:是由n(n0)个数据元素组成的有穷序列。

    5、 2.线性表的基本运算有: 1)Initiate(L),加工型运算,作用是构造空表,即表的初始化; 2)Length(L),引用型运算,其结果是表的结点个数,即表长; 3)Get (L,i), 引用型运算,若1iLength(L),其结果是表中的第i个结点;否则,为一特殊值。 4)Locate (L,x) ,引用型运算,查找L中值为x的结点并返回结点在L中的位置,若有多个x则返回首个;否则返回特殊值表示查找失败。 5)Insert (L,x,i),加工型运算,在表的第i个位置插入值为x的新结点,要求1iLength(L)+1; 6)Delete (L,i),加工型运算,删除表的第i个位置的结点

    6、,要求1iLength(L); 3.顺序表:是线性表的顺序存储结构,即按顺序存储方式构造的线性表的存储结构。 4.顺序表结点的存储地址计算公式:Loc(ai)=Loc(a1)+(i-1)*C;1in (其中Loc(a1)是顺序表的第一个结点,C每个变量占用的内存单元)。 5.顺序表上的基本运算 (1)插入 Void insert_sqlist(sqlist L,datatype x,int i) /*将X插入到顺序表L的第i-1个位置*/ if(L.last=maxsize) error(“overflow”); /*溢出*/ if(iL.last+1) error (“position er

    7、ror”); /*非法位置*/ for(j=L.last;j=i;j-) L.dataj=L.dataj-1; /*结点依次后移*/ L.datai-1=x; /*置入X*/ L.last=L.last+1 /*修改表长*/ 在顺序表上插入要移动表的n/2结点,算法的平均时间复杂度为O(n)。(2)删除 Void delete_sqlist(sqlist L,int i); /*删除顺序表L中的第i个位置上的结点*/ if (iL.last) error (“position error”); /*非法位置*/ for(j=i+1;j=L.last;j+) L.dataj-2=L.dataj-

    8、1; /*依次前移,注意第一个L.dataj-2存放ai*/ L.last=L.last-1 /*修改表长*/ 在顺序表上删除要移动表的(n+1)/2结点,算法的平均时间复杂度为O(n)。 (3)定位 Void locate_sqlist(sqlist L,datatype X) /*在顺序表中从前往后查找第一个值等于X的结点。若找到则传回该节点的序号;否则传回0*/ i=1; /*i指示顺序表L中结点序号*/ while (iL.last)&(L.datai-1!=x) /*注意:a1在L.datai-1中*/ i+; /*从前往后找*/ if (iL.last) return (i) el

    9、se return (0) 6. .单链表:只有一个链域的链表称单链表。(单链表表示法的基本思想是用指针表示结点间的逻辑关系) 单链表的一个结点包含两个部分,结点形式如下:数据域 指针域(链域) (1) 建立单链表。时间复杂度为O(n)。 在单链表中加头结点的作用:操作统一;无论链表是否为空,链表的指针不变。 (2) 定位(按值查找) Int locate_lklist(lklist head,datatype x) /*求表head 中第一个值等于X的结点的序号。不存在这种结点时结果为0*/ P=head;j=0; /*置初值*/ While(p-next!=NULL)&(p-data!=x

    10、) p=p-next;j+; If p-data=x return(j); Else return(0); (3)删除 时间复杂度为O(n) Void delete_lklist(lklist head;int i) /*删除表head的第i个结点*/ p=find_lklist(head,i-1); /*先找待删结点的直接前驱*/q=p-next; /*q指向待删结点*/ p-next=q-next; /*摘除待删结点*/ free(q); /*释放已摘除结点q*/ Else error(“不存在第i个结点”) /*否则给出相关信息*/ (3) 插入 时间复杂度为O(n) Void inse

    11、rt_lklist(lklist head,datatype x,int i) /*在表head的第i个位置上插入一个以x为值的新结点*/ P=find_lklist (head,i-1); /*先找第i-1个结点*/ if(p=NULL) /*若第i-1个结点不存在*/ error(“不存在第i个位置”) /*退出并给出出错信息*/ else S=malloc(size); s-data=x; /*否则生成新结点*/ S-next=p-next; /*结点*p的链域值传给结点*s的链域*/ p-next=s; /*修改*p的链域*/ 7.循环链表:是一种首尾相连的链表。特点是无需增加存储量,

    12、仅对表的链接方式修改使表的处理灵活方便。 主要优点:从表中任一结点出发都能通过后移做而扫描整个循环链表。 8.空循环链表仅由一个自成循环的头结点表示。 prior data next ,形成的链表中有两条不同方向的链称为双链表。 10.双链表的特点是找结点的前驱和后继都很容易。 11.顺序表和链表的比较 1) 基于空间的考虑:顺序表的存储空间是静态分配的,链表的存储空间是动态分配的。顺序表的存储密度比链表大。因此,在线性表长度变化不大,易于事先确定时,宜采用顺序表作为存储结构。 2) 基于时间的考虑:顺序表是随机存取结构,若线性表的操作主要是查找,很少有插入、删除操作时,宜用顺序表结构。对频繁

    13、进行插入、删除操作的线性表宜采用链表。若操作主要发生在表的首尾时采用尾指针表示的单循环链表。 第 三 章 栈 和 队 列 1. 栈是限制仅在表的一端进行插入和删除运算的线性表又称为后进先出表(LIFO表)。插入、删除端称为栈顶,另一端称栈底。表中无元素称空栈。 2. 栈的基本运算有: (1) 初始化 Initstack(s),加工型运算,构造一个空栈。 (2) 进栈 Push(S,X),加工型运算,将元素X插入栈S中,是X成为栈S的栈顶元素。 (3) 退栈 Pop(s),加工型运算, 当栈不为空时,将栈顶元素赋给X,并从栈中删除当前栈顶。 (4) 读栈顶 Top(s),引用型运算,若栈S不空,

    14、由X返回栈顶元素;当栈S为空时,结果为一个特殊标志。 (5) 判栈空 Empty(s), 引用型运算,若栈S为空栈,则结果为1,否则结果为0. 3. 顺序栈:栈的顺序存储结构称顺序栈。 4. .当栈满时,做进栈运算必定产生空间溢出,称“上溢”。 当栈空时,做退栈运算必定产生空间溢出,称“下溢”。上溢是一种错误应设法避免,下溢常用作程序控制转移的条件。 5. 在顺序栈上的基本运算: 1) 置空栈。 Void initstack(seqstack *s) s-top=-1; 2)判栈空。 int stackempty(seqstack *s) return s-top=-1; 3)判栈满。 int

    15、 stackfull(seqstack *s) return s-top=stacksize-1; 4)进栈。 Void push(seqstack *s,datatype x) if(stackfull(s) error(“stack overflow”); s-data+s-top=x; 5)退栈。 Datatype pop(seqstack *s) if(stackempty(s) error(“stack underflow”); return S-datas-top-; 6)取栈顶元素。 Dtatatype stacktop(seqstack *s) if(stackempty(s)

    16、 error(“stack underflow”); return S-datas-top; 6. 链栈:栈的链式存储结构称链栈。栈顶指针是链表的头指针。 7.链栈上的基本运算: 1) 建栈。 Void initstack(linkstack *s) s-top=NULL; 2)判栈空。 Int stackempty (linkstack *s) return s-top=NULL; 3) 进栈。 Void push(linkstack *s,datatype x) stacknode *p=(stacknode *)malloc(sizeof(stacknode); p-data=x; p-

    17、next=s-top; s-top=p; 4) 退栈。 Datatype pop(linksatck *s) datatype x; stacknode *p=s-top; if(stackempty(s) error(“stack underflow”); x=p-data; s-top=p-next; free(p); return x; 5) 取栈顶元素。 Datatype stacktop(linkstack *s) if(stackempty(s) error(“stack is empty”); return s-top-data; 8. 队列是一种运算受限的线性表,允许删除的一端

    18、称队首,允许插入的一端称队尾。队列又称为先进先出线性表,FIFO表。 9. 队列的基本运算: 1)初始化 InitQueue(Q),加工型运算,设置一个空队列Q。 2)入队列 EnQueue(Q,X),加工型运算,将X插入到队列Q的队尾。 3)出队 OutQueue(Q,X),加工型运算,若队列Q不为空,则将队头元素赋给X,并删除队头结点,而该结点的后继成为新的队头结点。 4)判队列空 EmptyQueue(Q),引用型运算,若队列Q为空,则返回的值为1,否则为0。 5)读队头 GetHead(Q,x),引用型运算,Q不空时由参数X返回队头结点的值,否则给一特殊标志。 10.顺序队列:队列的顺

    19、序存储结构称顺序队列。设置front和rear指针表示队头和队尾元素在向量空间的位置。 11.顺序队列中存在“假上溢”现象,由于入队和出队操作使头尾指针只增不减导致被删元素的空间无法利用,队尾指针超过向量空间的上界而不能入队。 12.为克服“假上溢”现象,将向量空间想象为首尾相连的循环向量,存储在其中的队列称循环队列。i=(i+1)%queuesize 13.循环队列的边界条件处理:由于无法用front=rear来判断队列的“空”和“满”。 解决的方法有: 1) 另设一个布尔变量以区别队列的空和满; 2) 少用一个元素,在入队前测试rear在循环意义下加1是否等于front; 3) 使用一个记

    20、数器记录元素总数 14. 链队列:队列的链式存储结构称链队列,链队列由一个头指针和一个尾指针唯一确定。 15. .链队列的基本运算: 1)入队。 Void enqueue(linkqueue *q,datatype x) queuenode *p=(queuenode *)malloc(sizeof(queuenode); p-data=x; p-next=NULL; if(queueempty(q) q-front=q-rear=p; else q-rear-next=p; q-rear=p; 2)出队。 Datatype dequeue(linkqueue *q) datatype x;

    21、queuenode *p; if(queueempty(q) error(“queue is underflow”); p=q-front; x=p-data; q-front=p-next; if(q-rear=p) q-rear=NULL; free(p); return x; 第 四 章 串 1. 串:是由零个或多个字符组成的有限序列;包含字符的个数称串的长度; 2. 空串:长度为零的串称空串; 空白串:由一个或多个空格组成的串称空白串; 子串:串中任意个连续字符组成的子序列称该串的子串; 主串:包含子串的串称主串;子串的首字符在主串中首次出现的位置定义为子串在主串中的位置; 3. 空串

    22、是任意串的子串; 任意串是自身的子串; 串常量在程序中只能引用但不能改变其值; 串变量取值可以改变; 4. 串的基本运算 (1) 赋值 ASSIGN(S,T),加工型运算,将串T的值传给串变量S。 (2) 判等 EQUAL(S,T),引用型运算,若S和T 的值相等则返回值为1,否则返回值为0. (3) 求长 LENGTH(S),引用型运算,求串的长度。 (4) 联接 CONCAT(S,T),引用型运算,运算结果为由S和T联接在一起形成的新串。 (5) 求子串SUBSTR(S,i,j),引用型运算,其结果是串S中从第i个字符开始的,由连续j个字符组成的子串。 (6) 插入 INSERT(S1,i

    23、,S2),加工型运算,作用是将串S2整个插入到串S1的第i个字符之后从而产生的一个新串。 (7) 删除 DELETE(S,I,j),加工新运算,作用是从串S中删去从第i个字符开始的长度为j的子串。 (8) 定位INDEX(S,T),引用型运算,若在串S中存在一个于T相等的子串,则本运算的结果为S中第一个这样的子串中的第一个字符在S中的位置;否则,结果为0. (9) 替换 REPLACE(S,T,R),加工型运算,结果是在串S中处处同时以串R置换串T的所有出现所得的新串。 5. 串的存储结构: (1) 串的顺序存储 (2) 串的链接存储 第 五 章 多 维 数 组 1. 多维数组:一般用顺序存储

    24、的方式表示数组。 2. 数组的逻辑结构是线性结构的推广。 3. 数组的基本运算是: (1) 读:给定一组下标,读取相应的数据元素; (2) 写:给定一组下标,修改相应的数据元素。 4. 矩阵的压缩存储:值相同的多个元素只分配一个存储空间,零元素不分配空间。 (1) 特殊矩阵:值相同的元素或零元素在矩阵中分布有一定的规律的矩阵。 1) 对称矩阵:在一个n阶的方阵A中,元素满足Aij=Aji 1=i,j1,则X的双亲的编号为i/2. 2).若2in,则结点X无左孩子(且无右孩子);否则,X的左孩子的编号为2i。 3).若2i+1n,则结点X无右孩子;否则,X的右孩子编号为2i+1。 19.二叉树中

    25、某一结点的左子树深度减去右子树的深度,称为该结点的平衡因子。 20.二叉树的存储结构 (1)链式存储结构: 二叉链表结点的结构为:l lchild | data | rchild ; 二叉链表由根指针唯一确定。 (2)顺序存储结构: 把一棵有n个结点的完全二叉树,从树根起自上而下、从左到右对所有结点编号,然后依次存储在一个一维数组b0n中,b1n存放结点,b0存放结点总数。 各个结点编号间的关系: 1) i=1是根结点;i1则双亲结点是i/2取整; 2) 左孩子是2i, 右孩子是2i+1;(要小于n) 3) i(n/2取整)的结点是叶子; 4) 奇数没有右兄弟,左兄弟是i-1; 5) 偶数没有

    26、左兄弟,右兄弟是i+1; 21.二叉树的遍历:就是按某种次序系统的“访问”二叉树上的所有结点,是每个结点恰好被“访问”一次。 22. 二叉树的遍历方式有:前序遍历、中序遍历、后序遍历。时间复杂度为O(n)。23.树的存储结构: (1)孩子链表表示法是树的一种链式存储结构。 1)孩子链表表示法的思想是:树上的一个结点的内容以及指向该结点所有的孩子的指针存储在一起以便于运算的实现。 2)一个孩子链表是一个带头结点的单链表,单链表的头结点含有两个域:数据域和指针域。(以图1为例) 数据域指针域 孩子域 指针域(2)孩子兄弟链表表示法: (3).双亲表示法: 24.森林通常定义为树的集合。 25. 树、森林与二叉树的转换 (1)树与二叉树的转换: 1)所有兄弟间连线; 2)保留与长子的连线,去除其它连线。该二叉树的根结点的右子树必为空 (2)森林与二叉树的转换: 1)将所有树转换成二叉树;


    注意事项

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

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




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

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

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

    收起
    展开