数据结构与算法(4)----->链表、二分搜索

1.  链表的基本概念

  1. 链表和数组一样都是一种线性结构;

    • 数组是一段连续的存储空间;
    • 链表空间不一定保证连续,是临时分配的;
  2. 链表的分类
    • 按方向:

      • 单链表:每个节点只能通过next指针指向下一个节点;
      • 双链表:除了可以用next指针之外,还可以用previous指针,指向前一个节点;
    • 按有无环:
      • 普通链表
      • 循环链表(首尾相接的链表,最后一个元素的next指针指向第一个元素;对于双链表,第一个元素的previous指针还需要指向最后一个元素)

2.  单链表的翻转操作

  1. 当链表为空或者长度为1时,特殊处理;
  2. 其他的单链表,采用如下方式:
    • 假设前面已经翻转好的部分头部为head,当前节点是now

      • 将now节点的next指针指向head;
      • 将now节点设置为新的翻转完成的节点的头部head now;
      • 将之前now节点的下一个节点的next指针,指向head now,如此类推~

3.  二分搜索常用场景

  1. 在有序序列中查找一个数;

    • 例如,给定一个数组arr,判断整数m是否在arr之中(思路:判断arr中间的数mid与m的大小关系,如果m>mid,则mid左边部分都小于m(因为有序),同样的方法,对mid与右半部分之间的元素再次选取mid2进行同样的搜索操作!每次搜索范围减半,如果最后搜索到0都没找到m,则m不在arr数组之中!返回false)
  2. 二分搜索还能用于无序序列之中;

原文地址:https://www.cnblogs.com/Mairr/p/8408476.html

时间: 2024-11-16 03:10:23

数据结构与算法(4)----->链表、二分搜索的相关文章

Java数据结构和算法之链表

三.链表 链结点 在链表中,每个数据项都被包含在'点"中,一个点是某个类的对象,这个类可认叫做LINK.因为一个链表中有许多类似的链结点,所以有必要用一个不同于链表的类来表达链结点.每个LINK对象中都包含一个对下一个点引用的字段(通常叫做next)但是本身的对象中有一个字段指向对第一个链结点的引用. 单链表 用一组地址任意的存储单元存放线性表中的数据元素. 以元素(数据元素的映象)  + 指针(指示后继元素存储位置)  = 结点(表示数据元素 或 数据元素的映象) 以"结点的序列&q

数据结构与算法-单向链表

概述 由于最近在工作中需要用到树形结构来解决一些问题,所以萌生了系统学习“数据结构和算法”的想法,于是乎从最简单的表结构开始.由于数组是最简单的表结构的实现,也是各个编程语言内置的数据类型,所以不做更多的记录.表结构中以下实现打算学习: LinkedList Stack Queue HashTable Dictionary 本篇为学习数据结构的第一篇随笔,从最简单的单向链表开始吧. 实现(C#) 平台:dotNet Core 1.0, C# IDE:VSCode 如果考虑算法复用的话,可以实现泛

数据结构与算法(三)--链表

一.链表 单项链表.循环链表.双向链表 链表和数组不同,链表的每个元素都存储了下一个元素的地址,所以链表不需要连续的存储空间: 如果我们申请一个 100MB 大小的数组,当内存中没有连续的.足够大的存储空间时,即便内存的剩余总可用空间大于 100MB,仍然会申请失败. 1.单链表:内存块称为链表的"结点",把这个记录下个结点地址的指针叫作后继指针 next 头结点用来记录链表的基地址.有了它,我们就可以遍历得到整条链表.而尾结点特殊的地方是:指针不是指向下一个结点,而是指向一个空地址

数据结构与算法三(链表)

一.链表 1.什么是链表 和数组一样,链表也是一种线性表 从内存结构上看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构 链表中的每一个内存块被称为节点Node,节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next 2.常见的缓存策略 先进先出策略FIFO (First In,First Out) 最少使用策略LFU (Least Frequently Used) 最近最小使用策略LRU(Least Recently Used) 3.常

数据结构和算法--3链表(单向链表、双向链表、环形单向链表和约瑟夫问题)

链表 链表是以节点的方式来存储 每个节点包含data域和next域,指向下一个节点 链表的各个节点不一定是连续存储 链表分带头节点的链表和没有头节点的链表,根据实际的需求来确定 单向列表 最大特点是可以将物理地址上不连续的数据连接起来,通过指针来对物理地址进行操作,实现增删改查等功能. 单链表分为两种:有头链表和无头链表. 有头节点的增删改查 定义一个单链表的类: //定义一个SingleLinkedList,单链表,管理HeroNode class SingleLinkedList{ //初始

数据结构与算法之链表

链表的分类: (1)单链表 头插法:只需要维护一个头结点即可,常用来模拟堆栈: 尾插法:需要维护头结点和尾结点,常用来模拟队列. (2)双向链表 双向遍历,可以用来保存网页的历史记录等: (3)循环链表 经常出现在面试题中,判断链表是否有环. 链表的删除 方式一:维护两个指针,current(表示当前节点)和previous(表示当前节点的前一个节点).当current遍历到要删除的元素时,执行previous->next = current->next,并删除current.在删除时,需要判

研磨数据结构与算法-04链表

一,链表的节点 /* * 链结点,相当于是车厢 */ public class Node { //数据域 public long data; //指针域 public Node next; public Node(long value) { this.data = value; } /** * 显示方法 */ public void display() { System.out.print(data + " "); } } 二,简单链表 /* * 链表,相当于火车 */ public

数据结构和算法-008 链表

链表,要简单讲一讲. 链(Link)一般有两个部分,一是节点(node)和指针(point) Node:存放内容(content) Point:指向下一个节点,把节点穿起来,就形成链表 看代码, 这个的link其实是一个节点(Node),link穿起来就是一张链表(LinkedList) 实现一下功能 创建链表 在链表头部添加一个节点 删除头部节点 查找一个节点 删除指点节点 public class Link {          public String bookName;     pub

数据结构与算法—单链表

By francis_hao    Dec 24,2016 本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可.欢迎转载,请注明出处:转载自:http://www.cnblogs.com/yinghao1991/ 参考

数据结构与算法 —— 单向链表的逆转

1 List Reverse(List L) 2 { 3 Node *new_head, *old_head, temp; 4 new_head = NULL; 5 old_head = L; 6 while(old_head) 7 { 8 temp = old_head->next; 9 old_head->next = new_head; 10 new_head = old_head; 11 old_head = temp; 12 } 13 14 L = new_head; 15 retu