首页 > 其他分享 >常用的数据结构

常用的数据结构

时间:2024-05-07 17:12:10浏览次数:26  
标签:node 常用 ListNode val next new 数据结构 public

日常开发中,可能会用到的数据结构类型

数组

一组相同类型的元素的集合,可以通过下标进行访问和操作。在C#中,有 Array、ArrayList、List
时间复杂度:查找是 O(N)。插入和删除是O(N)。数组通过下标直接访问 元素,时间复杂度是O(1)。数据的每次新增或者删除,数据需要重新排列顺序,时间复杂度是O(N)

链表

由节点组成的数据结构,每个节点包含元素和指向下一个节点的指针。 在C# 中,有 LinkedList、LinkedListNode
1.元素不连续分配,每个元素都有记录前后节点,节点值可以重复
2.不能下标访问,找元素就只能遍历 查找不方便
LinkedListNode<int> node123 = linkedList.Find(123); // 元素123的位置 从头查找
时间复杂度: 查找是 O(N)。插入和删除是O(1)

哈希表

基于Key-Value的存储结构,查找快。在c#中有 HashTable,HashSet(可自动去重), Dictionary
也叫散列表,不保证元素的顺序,在散列表中,使用哈希算法计算得出元素存放位置,使用数据来实现。如果需要哈希碰撞,可能使用链表或者其他方式解决问题。所以哈希表,它结合了数组和链表两种方式。
时间复杂度: 查找是 O(1)。插入和删除是O(1)

队列

先进先出。在C# 中 有 Queue。
先进先出 放任务延迟执行,A不断写入日志任务 B不断获取任务去执行(Queue<string> numbers = new Queue<string>())

先进后出。在C#中 有 Stack

回文题

public class ListNode
{
    public int val;
    public ListNode next;
    public ListNode(int val = 0, ListNode next = null)
    {
        this.val = val;
        this.next = next;
    }
}

public static void MainIsPalindrome()
{
    ListNode n1 = new ListNode(1);
    ListNode n2 = new ListNode(2);
    ListNode n3 = new ListNode(2);
    ListNode n4 = new ListNode(1);

    n1.next = n2;
    n2.next = n3;
    n3.next = n4;

    bool result = IsPalindrome2(n1);
    Console.WriteLine(result); // 输出 true
}

public static bool IsPalindrome2(ListNode node)
{
    Stack<int> stack = new Stack<int>(); // 栈
    Queue<int> queue = new Queue<int>(); // 队列
    while (node != null)
    {
        stack.Push(node.val);
        queue.Enqueue(node.val);
        node = node.next;
    }

    while (stack.Count > 0)
    {
        var a = stack.Pop();
        var b = queue.Dequeue();
        if (a != b)
        {
            return false;
        }
    }

    return true;
}

解答此题,通过充分利用栈和队列,巧妙进行查找,解决问题。

标签:node,常用,ListNode,val,next,new,数据结构,public
From: https://www.cnblogs.com/Qintai/p/18177808

相关文章

  • 数据结构
    前缀和结构特征:连续子数组的元素和技巧:len(前缀和)=len(list)+1前缀和可以作为list的v,也可做为list的index!----哈希表(问的是xxx的数目)presum=[0]+list(accumulate(nums))---得到前缀和数组accumulate函数可以累加nums的值哈希表使用......
  • 常用术语
    编程语言中的基本术语解释在编程的世界里,有许多专业术语,每一个都有其特定的含义和用途。本文将详细解释一些常见的编程术语,并探讨它们在JavaScript及其他编程语言中的应用。运算符运算符是用于执行特定操作的符号或关键字。在JavaScript中,运算符可以用来执行算术运算(如加+、减-......
  • 循环编码:时间序列中周期性特征的一种常用编码方式
    在深度学习或神经网络中,"循环编码"(CyclicalEncoding)是一种编码技术,其特点是能够捕捉输入或特征中的周期性或循环模式。这种编码方法常用于处理具有周期性行为的任务,比如时间序列预测或理解展示周期性特征的序列。循环编码的核心思想是将数据的周期性特征转化为网络能够理解的形......
  • Linux常用命令:echo、cat、tail详解
    Linux常用命令:echo、cat、tail详解Linux常用命令:echo、cat、tail详解在Linux系统中,命令行工具是非常强大的。其中,echo、cat和tail这三个命令在日常的系统管理和文本处理中经常被使用。下面,我们将逐一探讨这三个命令的详细用法和常见示例。1.echo命令echo是一个常用的输出......
  • Fiddler-常用功能使用教程
      1、Fidder下载地址:https://fiddler2.com/r/?GetFiddler4注意:Fidder安装后不会自动生成快捷方式,不要重复安装 2、Fidder安装证书,如果没有安装证书,抓包只有HTTP,没有HTTPS 3、重装证书方法:另一种方法 4、HTTP响应是乱码选中Decode后,这样就会自动解压HTTP响应,否......
  • mysql 的常用批量更新
    批量更新inupdatetableNamesetcolumnName=valuewherecolumnNamein(value1,value2,value3);有局限性,限制了更新的属性值必须一致。如果不一致,需要分开写多个update语句。insertinto...onduplicatekeyupdateinsertintotableName(columnName1,columnName2)......
  • Linux常用命令
    Linux是一种开源的类Unix操作系统,它在全球范围内得到了广泛的应用。作为一名IT技术专家,掌握Linux的常用命令对于提高工作效率和解决问题至关重要。在这篇博客中,我将为您介绍一些常用的Linux命令及其用法。1.ls:列出目录中的文件和文件夹ls命令用于列出当前目录下的文件和文件......
  • 09.常用类
    1.Object类jdk中文在线文档:https://www.matools.com/api/java81.1.equals方法与==对比==比较运算符:既可以判断基本类型,又可以判断引用类型;如果判断的是基本类型,判断的是值是否相等;如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一个对象equals方法:只能......
  • maven 常用依赖
    lombok引入:<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>使用:@Data: 作用:相当于同时添加@Setter、@Getter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor五个注解。 位置:类......
  • Redis常用命令
    Redis数据类型: String字符串Lists列表Sets集合Sortedsets有序集合Hashs哈希表 常用命令#插入数据setnamephp#读取getname#删除键值delname#验证键值是否存在existsname#setnx;,设置key对应的值为string类型的value。如果key已经存在,返回......