《大话数据结构》框要

随着复习的不断深入,发现数据结构的基础并不牢固,找到了一本相对经典的数据结构书籍——大话数据结构,网上的资源很多,很容易找到PDF版,下面对这本书的知识点做整体性的梳理,主要为之后再回头看找到方向。

第一章 数据结构绪论

    1. 什么是程序?

          程序 = 数据结构 + 算法           

     2. 什么是数据结构?

          是相互之间存在的一种或多种特定关系的数据元素的集合。

     3. 数据结构可分为哪两种结构?

          逻辑结构:数据对象中数据元素之间的相互关系

                         1.集合结构

                          2.线性结构:一对一

                          3.树形结构:一对多

                          4.图形结构:多对多

          物理结构:数据的逻辑结构在计算机中的存储形式,也是  存储结构

                           1.顺序存储结构:地址连续

                            2.链式存储结构:地址可以连续也可以不连续

第二章 算法

    1. 什么是算法?

            算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作

    2. 算法的五大特性是什么?

            算法的五个基本特性:

                                        1. 输入

                                        2. 输出(算法至少有一个输出)

                                        3. 有穷性

                                        4. 确定性

                                        5. 可行性

    3. 算法设计有什么要求?

              1. 正确性

              2. 可读性

              3. 健壮性

              4. 时间效率高和存储量低

    4. 算法效率的度量方法有哪些?

               1. 事后统计方法

               2. 事前分析估计方法

    5. 算法时间复杂度:大O阶方法如何推导?

               1. 用常数1取代运行时间中的所有加减法常数;

               2. 在修改后的运行次数函数中,只保留最高阶项;

               3. 如果最高阶项存在且不是1,则去除与这个项相乘的常数;

               4. 得到的结果就是大O阶           

    6. 时间复杂度耗时排序?

                O(1) < O(logN) < O(N) < O(NlogN) < O(N^2)  < O(N^3) < O(2^N) < O(N!) < O(N^N)

    7. 什么是算法的空间复杂度?

               算法的空间复杂度是通过计算算法所需的存储空间实现

第三章 线性表

    1. 什么是线性表?

                List:零个或多个数据元素的有限序列(序列:说明元素之间有顺序、有限:说明线性表是有限的)

    2. 什么是线性表的顺序存储结构?

                是指用一段地址连续的存储单元依次存储线性表的数据元素

    3. 顺序存储结构的线性表 地址计算方法?

                存储器中的每个存储单元都有自己的编号,这个编号称为地址。

                              LOC(ai)= LOC(a1)+ (i - 1)* c

    4. 线性表的顺序存储结构更适合执行哪些操作?

                 1. 适合   存取操作,其时间复杂度为O(1)

                 2. 不适合  插入和删除操作,其时间复杂度为O(n)

    5. 什么是线性表的链式存储结构?

                 一个或多个结点(Node)组合而成的数据结构称为:链表

                结点由两部分内容构成:数据域(存储真实数据元素)、指针域(存储下一个结点的地址)

                链表的第一个结点的存储位置叫做:头指针

                链表的最后一个结点指针为“空”:NULL

                 头结点:为了方便对链表进行操作,在链表的第一个结点前附设一个节点,就是头结点:Head

    6. 单链表如何完成插入和删除操作?

                  1. 插入

                      p -> next = s -> next;      p -> next = s;   (先调整地址,在插入值,顺序不可颠倒)

                  2. 删除

                      q = p -> next;        p ->next = q ->next;

    7. 线性表的链式存储结构更适合执行哪些操作?

                 1. 不适合   存取操作,其时间复杂度为O(n)

                 2. 适合  插入和删除操作,其时间复杂度为O(1)

                 对于插入或删除数据越频繁的操作,单链表的效率就越明显。

    8. 什么是静态链表?(不是重点)

                 用数组代替指针,将指针地址转化为数组地址,用数组描述的链表叫做静态链表(游标实现法)。

    9. 什么是循环链表?

                将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相连的单链表称为单循环链表,简称循环链表。

                循环链表判定的条件为当前结点是否指向头结点:p -> next = head ,是则当前结点为尾结点rear

    10. 什么是双向链表?

               在单链表的每个结点中,再设置一个指向其前驱结点的指针域,在双向链表中的结点都有两个指针域,一个指向直接后继(next),一个指向直接前驱(prior)

                 p ->  next -> prior = p = p -> prior -> next 

    11. 双向链表如何完成插入和删除操作?

                  1. 插入(顺序很重要)

                       s ->prior = p;

                       s -> next = p-> next;

                       p -> next ->prior = s;

                       p -> next = s;

                  2. 删除(顺序很重要)

                       p -> next =  q -> next;

                       q -> next -> prior = p;

                       free(q);

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值