线性表:

线性表是最简单,最基本,最常用的数据结构。线性表中的数据元素之间存在一对一的关系。即:除了第一个元素,其他元素前面有且只有一个元素;除了最后一个元素,其他元素后面有且只有一个元素。生活中的例子:糖葫芦。

(图片来自网络,侵删)

分类:

根据数据存储结构的不同,大体上可以分为:顺序表,链式表。

顺序表:

在内存中用一块地址连续的空间存放线性表的数据元素,因此查找元素时非常方便。增加或删除元素时,需要移动剩下的元素。

链式表:

不强求用连续的内存空间存放线性表的数据元素。除了基本的数据元素,还有一个标识用于保存逻辑上相邻元素的地址信息。增加或删除元素时,不需要移动元素。

如图所示,(node1-next)是头节点,(node4-next)是尾节点。node1的next指向node2,node2的next指向node3,node3的next指向node4。

LeetCode 练习:

LeetCode 是一个在线的刷题网站,建议上英文网站 https://leetcode.com/  点击 Problems,在右侧的 Topics 下选择 Linked List。这一步是依据 Topic 选择相应的题目,Linked List 代表了链表。下面我们做几道 Easy 类型的题目巩固一下基础。给出的示例代码不一定是最优解,请做完后阅读Discuss,参考别人的答案。

题目:876.Middle of the Linked List

描述:给定一个非空线性表,返回中间的节点开始的列表。如果中间节点有两个,返回第二个节点后开始的列表。

例如:给定 [1,2,3,4,5],返回 [3,4,5];给定 [1,2,3,4,5,6],返回 [4,5,6]

说明:第一次做题请选择对应的语言。如下图所示,选择了 C#:

思考:

根据示例代码,目的是返回中间的节点。提供的ListNode结构,只有值val与下一个节点next,没有位置标识。

因此我们可以创建一个List集合,遍历head,放入List,然后直接返回中间的节点。参考代码如下:

一般代码写完后,点击下面的 Run Code,初步检查没错后再点击 Submit

代码的运行结果如下:

可见运行速度还是可以的,只是使用的内存稍高一些。

题目:206. Reverse Linked List

描述:链表反转。

思路:相邻对象交换。参考代码如下:

数据结构与算法(C#)入门 --- 线性表的更多相关文章

  1. JavaScript 数据结构与算法之美 - 线性表(数组、栈、队列、链表)

    前言 基础知识就像是一座大楼的地基,它决定了我们的技术高度. 我们应该多掌握一些可移值的技术或者再过十几年应该都不会过时的技术,数据结构与算法就是其中之一. 栈.队列.链表.堆 是数据结构与算法中的基 ...

  2. 数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解

    数据结构与算法系列2 线性表 使用java实现动态数组+ArrayList源码详解 对数组有不了解的可以先看看我的另一篇文章,那篇文章对数组有很多详细的解析,而本篇文章则着重讲动态数组,另一篇文章链接 ...

  3. 数据结构与算法系列2 线性表 链表的分类+使用java实现链表+链表源码详解

    数据结构与算法系列2.2 线性表 什么是链表? 链表是一种物理存储单元上非连续,非顺序的存储结构,数据元素的逻辑顺序是通过链表的链接次序实现的一系列节点组成,节点可以在运行时动态生成,每个节点包括两个 ...

  4. javascript实现数据结构与算法系列:线性表的静态单链表存储结构

    有时可借用一维数组来描述线性链表,这就是线性表的静态单链表存储结构. 在静态链表中,数组的一个分量表示一个结点,同时用游标(cur)代替指针指示结点在数组中的相对位置.数组的第0分量可看成头结点,其指 ...

  5. ACM金牌选手算法讲解《线性表》

    哈喽,大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM亚洲区域赛金牌,保研985研究生,分享算法与数据结构.计算机学习经验,帮助大家进大厂~ 公众号:『编程熊』 文章首发于: ACM ...

  6. 已知长度为n的线性表采用顺序结构,写一算法删除该线性表中所有值为item的元素

    /** * @author:(LiberHome) * @date:Created in 2019/2/27 23:34 * @description: * @version:$ */ /*已知长度为 ...

  7. 数据结构(1) 第一天 算法时间复杂度、线性表介绍、动态数组搭建(仿Vector)、单向链表搭建、企业链表思路

    01 数据结构基本概念_大O表示法 无论n是多少都执行三个具体步骤 执行了12步 O(12)=>O(1) O(n) log 2 N = log c N / log c N (相当于两个对数进行了 ...

  8. C#数据结构_基本概念及线性表

    常见的4类数据结构: 1.集合. 2.线性结构.3.树形结构.4.图状结构. 数据结构(Data Structure)简记为 DS,是一个二元组,DS = (D,R) 其中:D 是数据元素的有限集合, ...

  9. JavaScript 数据结构与算法之美 - 非线性表中的树、堆是干嘛用的 ?其数据结构是怎样的 ?

    1. 前言 想学好前端,先练好内功,内功不行,就算招式练的再花哨,终究成不了高手. 非线性表(树.堆),可以说是前端程序员的内功,要知其然,知其所以然. 笔者写的 JavaScript 数据结构与算法 ...

随机推荐

  1. Mysql查询报错:Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

    使用sql别名关联查询的时候,由于字符集冲突导致该错误 解决方案,查询的时候强制转换字符集类型 case when column = '' then _gbk '' collate gbk_chine ...

  2. Android使用https与服务器交互的正确姿势

    HTTPS 使用 SSL 在客户端和服务器之间进行加密通信,错误地使用 SSL ,将会导致其它人能够拦截网络上的应用数据. 使用一个包含公钥及与其匹配的私钥的证书配置服务器,作为 SSL 客户端与服务 ...

  3. (转) jmeter 获取cookie

      转自 https://blog.csdn.net/five3/article/details/53842283 jmeter是测试过程中会被用到的一个测试工具,我们即可用来进行压力的压测,也可以用 ...

  4. vuex 状态管理

    npm安装:cnpm install --save vuex 安装完:cnpm install main.js引入: import Vuex from 'vuex' Vue.use(Vuex);

  5. Sublime 个人配置

    Sublime 个人配置 用的faltland主题,之后还加了一些自己喜欢的东西. 效果图如下: { "always_show_minimap_viewport": true, & ...

  6. Ubuntu 16.04 安装 Apache, MySQL, PHP7.2

    先更新系统 sudo apt update 安装PHP 通过修改PPA源的方式来安装 sudo apt-get install software-properties-common python-so ...

  7. hadoop启动namenode日志报这个错,首先说怎么看日志

    hadoop启动namenode日志报这个错,首先说怎么看日志, 启动namenode会有这个,ubuntu: starting namenode, logging to /home/xiaoye/h ...

  8. linux软AP--hostapd+dhcpd

    linux软AP--hostapd+dhcpd 2018年05月08日 ⁄ 综合 ⁄ 共 4908字 ⁄ 字号 小 中 大 ⁄ 评论关闭 随着手机.笔记本等无线设备的增多,公司里的家用三个无线路由器已 ...

  9. Hadoop Mapreduce中wordcount 过程解析

    将文件split 文件1:                                                                   分割结果: hello  world   ...

  10. 20175208 张家华 MyCP

    一.内容 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX2.bin 用来把文本文件(内容为 ...