精华内容
下载资源
问答
  • 数据结构与算法python 自己整理的笔记。
  • 算法 + 数据结构 = 程序

    有个读者 diao 要我推荐数据结构和算法方面的书,我觉得很有必要给大家普及一下,因为算法和数据结构实在是太特么重要了——就好像我们人类离不开氧气,绿色植物离不开二氧化碳一样!

    请肆无忌惮地点赞吧,微信搜索【沉默王二】关注这个在九朝古都洛阳苟且偷生的程序员。

    本文 GitHub github.com/itwanger 已收录,里面还有我精心为你准备的一线大厂面试题。

    除了 diao,还有个妹子在后台留言给我,也要推荐一波数据结构和算法方面的书籍:

    鉴于此,我没吃没喝耗了两天的时间,终于整理好了。除此之外,我还充了百度网盘的会员和 CSDN 的会员(好下载资源),也问了好几个数据结构和算法方面的专家,好验证我的书单是否值得信赖——他们异口同声的肯定了我的付出。

    可能有些读者会有这样的疑惑,数据结构有什么用?学习算法有必要吗?那我先来装模作样的回答一下这两个问题。

    在计算机领域,通常要处理这样的问题:

    1)如果将数据存储到计算机当中。

    2)用什么方法来解决这个问题。

    数据是一切能输入到计算机中的信息综合,结构是指数据之间的关系,那数据结构就是将数据和它们之间的关系存储到计算机当中。怎么实现存储呢?就需要选择合适的算法,效率才会更高。

    Pascal 之父、结构化程序设计的先驱 Niklaus Wirth 有一本非常著名的书,叫作《算法 + 数据结构 = 程序》,可见,数据结构和算法对于程序设计来说,真的非常重要。

    数据结构和算法,就像操作系统和计算机网络一样,看似离我们很近,但似乎又很远。

    之所以近,是因为如果不懂数据结构和算法,基本上面试就过不了,不管是校招还是社招。之所以远,是因为实际工作中,如果不涉及到操作系统、搜索引擎、网络调度等等方面的底层业务,如果不考虑性能,似乎根本用不到,只要把编程语言封装好的 API 调用得当,只要把框架用的熟练,照样能把代码写得 66 的。

    作为一名在编程领域摸爬滚打了十多年的老鸟,我必须郑重其事地提醒一下在座的各位。

    如果你是大学生,一定要学习数据结构和算法,否则面试碰壁的时候你会后悔的,除非你打算在小公司混一辈子。

    如果考研的话,数据结构也是必考科目。

    如果你已经参加工作,想要摆脱 CRUD 的标签,也一定要学习数据结构和算法,否则只能停留在助理工程师和工程师的阶段,无法更进一步。

    除此之外,掌握数据结构和算法,还有助于阅读源码和理解其背后的设计思想。

    明白了数据结构和算法的重要性之后,我相信读者朋友们已经迫不及待、摩拳擦掌、跃跃欲试了,“请告诉我们该阅读哪些书籍吧!”

    第一本,《大话数据结构》

    《大话数据结构》 这本书最大的特点是,它把理论讲得很有趣,不枯燥。读技术书最大的烦恼不是这本书经典不经典,而是能不能看的进去,能看的进去,学到了,这本书就是好书。如果看不进去,哪怕是再经典的书,对学习的能都没有一丁点的帮助,对吧?

    网络上对这本书的评价褒贬不一,但总体销量还是很不错的,作者也是一名老程序员了。书中的示例用的 C 语言。

    第二本,《算法图解》

    就像《算法图解》(代码使用 Python 语言实现的)这本书副标题写的那样,“像小说一样有趣的算法入门书”,主打“图解”,通俗易懂,学习起来就轻松多了,对吧?

    通过《大话数据结构》和《算法图解》两本书的学习,我相信读者朋友们一定能够入门数据结构和算法了。如果还想更系统、更深入地学习,请继续往下看。

    第三本,《数据结构和算法分析》

    黑皮书,一眼看上去,就知道是一本经典书,对吧?《数据结构和算法分析》这本书的作者也非常用心,例子不仅有 Java 版的,还有 C 版和 C++ 版的。

    这就解决了很多读者朋友们的烦恼,我不擅长 C 啊,我就想看 Java 版的,读者 giao 就要求我给他推荐一些 Java 版的书籍。

    第四本,《剑指 offer》

    这本书剖析了 80 个典型的编程面试题,如果能搞懂这本书里的内容,应付一般公司的面试应该不成问题。

    直白点说,学习算法和数据结构会非常辛苦,那既然付出了这么多心血,我们的目的就很明确,获得一份更好的工作岗位,《剑指 offer》这本书一定能够帮助到我们。

    刷题的话,可以选择牛客网或者力扣,如果是 Java 程序员的话,用 Java 刷题就行了。

    牛客网:

    https://www.nowcoder.com/ta/coding-interviews

    力扣:

    https://leetcode-cn.com/problemset/lcof/

    认认真真看完这四本书,如果能够一个一个例子做下来,我相信读者朋友们就可以拍着胸脯自信地说,“数据结构和算法,我算是拿下了!”

    “一千个读者,就有一千个哈姆雷特”,不同的读者在读同一本书的时候,感受也是不同的。同理,一个读者在读同一个主题下不同的书时,收获也会大有不同。

    那我觉得,很有必要再推荐一些其他方面的书,供不同的读者选择。

    第五本,《趣学数据结构》

    讲解比较生动,用 C++ 描述的,适合基础一般的初学者。作者陈小玉是我们河南的,还写过另外一本算法方面的书,同样很适合初学者。

    第六本,《啊哈算法》

    一本有趣的算法入门书,C 语言实现的,没有枯燥的描述,没有难懂的公式,一切以实际应用为出发点。

    第七本,《漫画算法:小灰的算法之旅》

    用漫画的形式讲述了算法和数据结构的基础知识、复杂多变的算法面试题目及算法的实际应用场景。出了两版,一版 Python,一版 Java。

    第八本,《程序员代码面试指南:IT 名企算法与数据结构题目最优解》

    这是一本程序员代码面试"神书”!书中对 IT 名企代码面试各类题目的最优解进行了总结,并提供了相关代码实现,选取将近 300 道真实出现过的经典代码面试题,"刷”完这书,就是"题王”!

    同样可以上牛客网上刷题:

    https://www.nowcoder.com/ta/programmer-code-interview-guide

    第九本,《算法》

    这是一本非常适合于自学以及作为教材的算法书,特点有:基础非常全面、图示清晰易懂、数学要求低。代码是通过 Java 实现的,虽然是一本大部头书,但难懂的话不过。

    第十本,《数据结构与算法之美》

    严格意义上说,这不是一本书,它是 XX 时间(虽然很隐晦,但还是打钱吧)平台推出的付费栏目。推荐原因我就不多说了,书籍看累了,是一种选择。

    就先推荐这十本吧,够大家学习一段时间了。最后,再来说一说学习数据结构和算法的方法吧,简单来说,就两点:

    1)选择一本合适的书

    这个问题,我已经帮大家解决了,不论你选择哪一本,最重要的是开始,不要犹豫,早就是优势。

    2)编程实现和应用

    理解不代表会用,对吧?只有自己亲自动手去实现,去反复的练习,才能真正地掌握。第一次练习可能不记不住,那就第二次、第三次,不要急躁,给自己一点时间和耐心。

    如果你手里有点闲钱,建议直接购买纸质书阅读;如果手头确实紧张,钱都给对象买礼物了,那下面这个百度链接也许可以缓解一下你的资金压力:

    下载链接:https://pan.baidu.com/s/1rB-CCjjpKPidOio7Ov_0YA 密码:g5pl

    如链接失效,请转至备用链接:https://shimo.im/docs/pJQv6qVcHqdYwrxx

    最后,希望二哥这些诚恳的建议能够给大家一点点帮助!love peace and sleep!

    展开全文
  • 目录 review Chapter 1 Introdution Chapter 2 Algorithm Analysis 一、运行时间估计 Chapter 3 Lists, Stacks, and Queues 表 栈 队列 ...算法+数据结构=程序 逻辑描述+物理操作 Chapter 2 Algorithm Analysi

     

    目录

    review

    Chapter 1 Introdution

    Chapter 2 Algorithm Analysis

    一、运行时间估计

    Chapter 3 Lists, Stacks, and Queues 表 栈 队列

    一、表 Lists

    二、栈 stack LIFO(后进先出)


    review

    Chapter 1 Introdution

    数据结构:数据集data set +关系relation + 操作operations

    算法+数据结构=程序

    逻辑描述+物理操作

    Chapter 2 Algorithm Analysis

    一、运行时间估计

    T(N)=O(f(N)) 存在正常数 c 和 n0 使得当 N ≧ n0 时 T(N) ≦ cf(N)

    T(N)=Ω(g(N)) 存在正常数 c 和 n0 使得当 N ≧ n0 时 T(N) ≧ cg(N)

    T(N)=Θ(h(N)) 当且仅当T(N) =O(h(N)) 且 T(N) = Ω(h(N))

    T(N)=o(p(N)) 若 T(N) = O(p(N)) 且 T(N) ≠ Θ(p(N))

    some rules

    1、若 𝑇_1 (𝑁)=𝑂(𝑓(𝑁)) 且 𝑇_2 (𝑁)=𝑂(𝑔(𝑁)), 那么

    (a) 𝑇_1 (𝑁)+𝑇_2 (𝑁)=max⁡(𝑂(𝑓(𝑁), 𝑂(𝑔(𝑁))),

    (b) 𝑇_1 (𝑁)∗𝑇_2 (𝑁)=𝑂(𝑓(𝑁)∗𝑔(𝑁))

    2、若𝑇(𝑁) 是 k 次多项式(polynomial), 那么 𝑇(𝑁)=Θ(𝑁^𝑘)

    3、对任意常数 k 有〖𝑙𝑜𝑔𝑁〗^𝑘 =𝑂(𝑁) .

    this tell us that logarithms(对数) grow very slowly

    Chapter 3 Lists, Stacks, and Queues 表 栈 队列

    一、表 Lists

    1.表的简单数组实现

    缺点:MaxSize 需要估计,通常需要估计得大一些,浪费大量空间,特别是存在未知大小的表;

    插入 Insertion 和Deletion 需要O(N) 时间,同时涉及大量数据移动;

    优点:PrintList 和 Find 以线性时间执行,FindKth 花费常数时间

     

    2.链表 linked list (指针实现)

    链表由一系列不必在内存中相连的结构组成,每个结构均含有表元素和指向包含该元素后继元的结构的指针 Next ,最后一个单元的 Next 指向 NULL(0);

    链表的类型声明

     

    struct Node;
    typedef struct Node *PtrToNode;
    typedef PtrToNode List;
    typedef PtrToNode Position;
    
    struct Node
    {
        ElementType Element;
        Positon Next;
    };

    测试链表是否为空

     

    // return true if is empty
    int IsEmpty(List L)
    {
        return L->Next == NULL;
    }

    测试当前位置是否为链表末尾

     

    //return true if P is the last position in list L
    int IsLast(Position P, List L)
    {
        return P->Next == NULL;
    }

    Find 例程 查找

    //return position of X in L; NULL if not find
    Position Find(ElementType X, List L)
    {
        Position P;
        P = L->Next;
        while( P != NULL && P->Element != X)
        {
            P = P->Next;
        }
        return P;
    }

    Delete 删除例程 O(1) time(需调用 FindPrevious 找到含有X的表元的前驱元P)

    void Delete(ElementType X, List L)
    {
        Position P, TmpCell;
        P = FindPrevious( X, L );
        if(!IsLast( P, L))// if p is the last->not find, else find
        {
            TmpCell = P->Next;
            P->Next = TmpCell->Next;
            free(TmpCell);
        }
    }
    Position FindPrevious(Element X,List L)
    {
        Position P;
        P = L;
        while(P->Next != NULL && P->Next->Element != X)
        {
            P = P->Next;
        }
        return P;
    }

    插入例程 O(1) time

    //insert after legal position P (use FindPrevious)
    void Insert( ElemrntType X, List L, Position P)
    {
        Position TmpCell = malloc(sizeof(struct Node));
        if( TmpCell == NULL)
        {
            return;//error
        }
        TmpCell->Element = X;
        TmpCell->Next = P->Next;
        P->Next = TmpCell;
    }

    双链表

    在数据结构上加上一个域,使它包含前一个单元的指针即可。

    循环链表

    让最后的单元反过来指向第一个单元

    特点

     

    1.数据存储在一组结构体中。每个结构体包含有数据及指向下一个结构体的指针。

    2.一个新的结构体可通过调用 malloc 而从系统全局内存(global memory)得到,并通过调用 free 被释放

     

     

    3.链表的游标实现

    链表游标实现的声明

    typedef int PtrToNode;
    typedef PtrToNode List;
    typedef PtrToNode Position;
    struct Node{
        ElementType Element;
        Position Next;
    };
    struct Node CursorSpace[SpaceSize];

     CursorAlloc & CursorFree

    static Position CursorAlloc(void)
    {
        Position P;
        P = CursorSpace[P].Next = CursorSpace[0].Next;
        return P;
    }
    static void CursorFree(Position P)
    {
        CursorSpace[P].Next = CursorSpce[0].Next;
        CursorSpace[0].Next = P;
    }

    测试是否为空-游标实现

    // return true if empty
    int IsEmpty(List L)
    {
        return CursorSpace[L].Next == 0;
    }

    测试 P 是否为链表末尾-游标实现

    //return true if p is the last position of list l
    int IsLast(Position P, List L)
    {
        return CuesorSpace[P].Next == 0;
    }

    Find, Delete, Insert 游标实现

    Position Find(Element X, List L)
    {
        Position P;
        P = CursorSpace[L].Next;
        while(P && CursorSpace[P].Element != X)
        {
            P = CursorSpace[P].Next;
        }
        return P;
    }
    void Delete(ElementType X, List L)
    {
        Position P, TmpCell;
        p = FindPrevious( X , L );
        if(!IsLast(P, L))
        {
            TmpCell = CursorSpace[P].Next;
            CursorSpace[P].Next =  CursorSpace[TmpCell].Next;
            CursorFree(TmpCell);
        }
    }
    void Insert(ElementType X, List L, Position P)
    {
        Position TmpCell = CursorAlloc();
        if(TmpCell == 0)
        {
            return;//error, out of space;
        }
         CursorSpace[TmpCell].Element = X;
         CursorSpace[TmpCell].Next = CursorSpace[P].Next;
         CursorSpace[P].Next = TmpCell;
    }

    链表的应用

    1.多项式 the polynomial ADT

    数组实现

    零多项式

    加法

    乘法

    链表实现

    其余同上

    2.基数排序 radix sort

    桶排序 bucket sort

    有 N 个整数,范围从1到 M ,留置一个数组 count ,大小为 M ,并初始化为 0.于是,count 有 M 个桶,开始时为空,当A_i 被读入时,count[A_I] +1.在所有输入被读完后扫描数组count 打印输出排好序的表,花费时间O(M+N)

    基数排序是桶排序的推广(x进制就有x个桶)

    使用多趟桶排序,最低有效位优先

    1.按照最低位优先进行桶式排序

    2.按照第一步得到的顺序按照次低位优先进行第二次桶排序;多于一个数进入同一个桶时按输入顺序放进去

    ......

    最后一步按照最高位排,没有这一位的为0。

    3.多重表 Multilists

    eg:一所有40000名学生和2500门课程的大学需要生成两种报告。第一个报告列出每个班的注册者,第二个报告列出每个学生注册的班级。

    类型声明

     

    题目

    1.given a linked list with a header node, delete the maximum value node

    试编写在带头结点的单链表中删除一个最大值结点的高效算法

     

    typedef struct NODE * pLinkList;
    struct NODE
    {    int data;
        struct NODE * link;
    };
    void delete_max(pLinkList list){
        if (!list->link){
            return;
        }
        pLinkList ptr_max, ptr_cur;
        ptr_max = list;
        ptr_cur = list->link;
        while (ptr_cur->link){
            if (ptr_cur->link->data > ptr_max->link->data){
                ptr_max = ptr_cur;
            }
            ptr_cur = ptr_cur->link;
        }
        ptr_cur = ptr_max->link;
        ptr_max->link = ptr_cur->link;
        free(ptr_cur);
    }

    2.已知一个带有表头结点的单链表,结点结构为,假设该链表只给出了头指针list。在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点(k为正整数)。若查找成功,算法输出该结点的data域的值,并返回1;否则,只返回0。

    typedef struct NODE * pLinkList;
    struct NODE{
        int data;
        struct NODE * link;
    };
    int  SearchRevk(pLinkList list,  int k){   
        pLinkList  p, q;
        int count;
        p = q = list->link;
        count = 0;
        while ( p != NULL ){  //倒数第k个为正数第n-k+1个,即n-(k-1)
            if ( count < k-1 ){
                count++;
            } else {//移动k-1次之后q开始动
                q = q->link;
            }
            p = p->link;
        }
        if ( count == k ){  
            printf("%d\n", q->data);
            return 1;
        } else {
            return 0;
        }
    }

     

    二、栈 stack LIFO(后进先出)

    1.数组实现

    struct  StackRecord {
      int     Capacity ;              /* size of stack */
      int     TopOfStack;          /* the top pointer */
      /* ++ for push, -- for pop, -1 for empty stack */
      ElementType  *Array;    /* array for stack elements */
     } ;
     typedef struct StackRecord *Stack;

    创建空栈

    释放栈S

     

    判断是否栈满

     

    Push操作

     

    Pop

     

     

    Top

     

    2.链表实现

     

     

     

     

     

     

     

     

     

    展开全文
  • 算法导论黑皮书答案

    2014-01-19 16:18:05
    算法导论第二版的课后答案。需要深入研究算法导论的学霸,用的着。 但是答案是英文的哦。
  • 数据结构算法与应用C++语言描述源代码。数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。
  • 数据结构算法C语言描述的全部答案,网上留传的是1-9章,我这里把1-12章全部拿出来给大家分享. 数据结构算法C语言描述的全部答案,网上留传的是1-9章,我这里把1-12章全部拿出来给大家分享.
  • 最近在慢慢写数据结构与算法分析(C语言描述)的课后习题答案。 地址:https://github.com/seineo/Data-Structures-and-Algorithm-Analysis-in-C ...

    最近在慢慢写数据结构与算法分析(C语言描述)的课后习题答案。

    地址: https://github.com/seineo/Data-Structures-and-Algorithm-Analysis-in-C

    如果对你有帮助,请收藏支持。(github页面右上角star)

    展开全文
  • 最小栈 解题思路: 用一个主栈记录数据,另一个辅助栈记录比栈顶小的元素。首先当插入第一个元素时,两个都插入,之后主栈继续插入,辅助栈则只记录要进来的比其栈顶元素小的。删除时就比较一下 ...

    最小栈

    在这里插入图片描述

    解题思路:

    用一个主栈记录数据,另一个辅助栈记录比栈顶小的元素。首先当插入第一个元素时,两个都插入,之后主栈继续插入,辅助栈则只记录要进来的比其栈顶元素小的。删除时就比较一下主栈栈顶元素和辅助栈栈顶元素,当辅助栈栈顶元素等于主栈栈顶元素时,辅助栈才删除栈顶元素。主栈中的最小元素就是辅助栈的栈顶元素。

    代码:

    public class MinStack 
    {  
      Stack<int> stack=new Stack<int>();    
      Stack<int> minstack=new Stack<int>();   
      public void Push(int x)     
      {      
        stack.Push(x);        
        if(minstack.Count==0)        
        minstack.Push(x);        
        else if(minstack.Peek()>=x)        
        minstack.Push(x);       
       }    
       public void Pop()     
       {      
         if(stack.Peek()==minstack.Peek())       
          {           
            stack.Pop();            
            minstack.Pop();       
           }        
           else stack.Pop();    
        }        
        public int Top()    
        {     
          int temp=stack.Peek();        
          return temp;    
         }        
         public int GetMin()     
         {     
            int temp=minstack.Peek();        
            return temp;    
          }
    }

    在这里插入图片描述

    展开全文
  • —— 《计算机组成设计 硬件/软件接口》 数据结构与算法 数据结构与算法尤其重要呀,校招大厂就特别爱考察,还没练起算法的同学,抓紧啦! 数据库 Mysql 两本高分的。 Redis 经典之作,重点看前三章,redis 的...
  • 数据结构与算法(一)-常用容器的了解 需要先学习一些Java的基础,另外此篇文章是为了之后的算法做铺垫 什么是数据结构算法数据结构包括数据对象集以及他们在计算机中的组织方式,即它们的逻辑结构和物理存储...
  • 数据结构与算法系列

    2017-12-28 22:20:00
    2019独角兽企业重金招聘Python工程师标准>>> 数据结构算法目录表 转载于:https://my.oschina.net/u/3421984/blog/1596384
  • 这些知识和技巧既是高等院校“算法与数据结构”课程的主要内容,也是国际青少年信息学奥林匹克(IOI)竞赛和ACM/ICPC国际大学生程序设计竞赛中所需要的。中分析了相当数量的问题。内容丰富,分析透彻,启发性强,...
  • 不得不说,仔细看一遍觉得归并排序都弄清楚了,不要因为感情问题而影响了自己,继续努力提高自己,让自己变成一个有用的人,onepeace是真的存在的,算法数据结构,python爬虫,java, c都学起来,练好自己的球技,...
  • 动态规划参考资料:刘汝佳《算法艺术信息学竞赛》《算法导论》推荐题目:http://acm.pku.edu.cn/JudgeOnline/problem?id=1141 简单http://acm.pku.edu.cn/JudgeOnline/problem?id=2288 中等,经典TSP问题...
  • 个人认为:《算法第4版》这本书,比标准教材《算法导论》要好非常非常多。 《算法导论》主要是探讨了如何在数学模型写一个漂亮的算法,老版还居然使用pseudo code。在学术上,毫无疑问《算法导论》更高。而此书,则...
  • 分布式计算是指由计算机网络连接的多处理平台的各种形式的计算、信息访问信息交换。 第一章 引言 分布式软件也称中间件分布式软件也称中间件 OMG(对象管理工作组),CORBA(公用对象请求代理体系结构),RPC(远程过程...
  • 本文将分享计算机类的大学生四年有必要读的书籍,涉及C语言、数据结构算法、计算机网络、计算机操作系统、Linux等等。
  • 编程程序,显示前100个回文素数,每行显示10个数,数字中间用一个空格隔开题目描述运行示例代码 题目描述运行示例 6.26(回文素数)回文素数是指一个数同时为素数和回文数。 例如,131是一个素数也是回文数,...
  • 导读:权威的作者、经典的教材、一流的译者、严格的审校、精细的编辑,这些因素使华章图书有了质量的保证。华章重磅黑皮书压轴登场,这套丛书以“计算机科学丛书”为总称出版,大理石纹理的封面,也正...
  • 小肥柴慢慢手写数据结构(C篇)(3-2 Stack应用举例)目录3-6 括号匹配(平衡符号)3-7 计算器(后缀表达式)3-8 迷宫问题(其实可以不用栈)3-9 最小栈(双栈的第一次使用)3-10 单调栈(正向栈和反向栈) ...
  • 算法用java描述第二版

    2018-11-09 21:28:21
    java语言的算法书籍,黑皮书,第二版。编程好比是一辆汽车,而数据结构算法是汽车内部的变速箱。一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数据结构算法的人也能编程。但是如果一个开车的人懂变速...
  • 软件工程黑全书知识点详细汇总 考纲目录 第一章 基本概念 2 1、软件的概念和特点 2 2、软件危机的概念和产生的原因 3 3、软件工程的定义、三要素和发展过程 (重点,考过多次问答题) 4 第二章 过程模型 4 1、...
  • 作为ADT(abstract data type)数据结构——数组,它链表都属于表(List)的一部分,而在数组中不仅可以存放任何数据类型的数据,同时对于已存储数据的获取效率及其高。因此它经常被作为主要容器存储数据。以下便...
  • 严蔚敏老师版《数据结构》笔记之基本概念和术语

    万次阅读 多人点赞 2018-09-07 01:40:25
    1. 什么是数据结构 如果要写好一个程序,必须分析待处理的对象的特性和对象之间的关系,这是“数据结构”形成和发展的背景。 “数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系...
  • 数据结构:栈

    2021-12-14 15:40:33
    数据结构:栈 ​ 栈是限制在表的一端进行插入和删除操作的一种数据结构。由于插入和删除均在表的一端实现,因此栈具有后进先出LIFO(Last In First Out)的特性。 相关概念及操作 概念 栈顶(Top):允许进行插入和...
  • 作为ADT(abstract data type)数据结构——链表,其主要组成部分为节点Node“指针”(C语言“如是说”,可java没有指针这一概念)。而链表可以分为单链表双链表。单链表是一个由若干节点,按照从头到尾,依次...
  • 小肥柴慢慢手写数据结构(C篇)(3-4 队列Queue)目录3-6 括号匹配(平衡符号) 目录 3-6 括号匹配(平衡符号) 在黑皮书P52中,这个问题被称为“平衡符号”,而在严版教材P49中设为3.2.2 括号匹配的检验,问题本质...
  • 小肥柴慢慢手写数据结构(C篇)(2-6 双链表 DoubleLinkedList)目录2-20 双链表的概念2-20-1 为什么需要双链表2-20-2 双链表样式2-21 朴素的ADT2-22 严版教材的相关讨论2-23 黑皮书的相关讨论2-24 Linux链表源码...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 234
精华内容 93
关键字:

数据结构与算法黑皮书

数据结构 订阅