常见的8中数据结构

本文介绍了数据结构的基本类型,包括线性结构如数组、栈、队列和链表,以及非线性结构如树、图、堆和散列表。线性结构中,数组适用于查询频繁且较少修改的情况,而栈和队列分别用于递归和多线程管理。链表则适合频繁的增删操作。非线性结构中,树和图提供更复杂的逻辑结构,堆常用于优先级队列,散列表则提供快速的查找。这些数据结构在不同的应用场景中发挥着重要作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        我们实际在工作当中,会经常遇到存储数据的情况,但是具体选中哪种方式去存储呢。这个时候我们学习数据结构的原因了,通过了解不同数据结构的特点,选择合适的数据结构进行数据的存储。数据结构其实就是让我们了解 常见的数据存储方式以及内部存储机理

线性结构:数组(Aray),栈(stack),队列(Queue),链表(Linked List)

非线性结构:树(Tree),图(Graph),堆(Heap),散列表(Hash)

数据结构基本按照三类方式区分:逻辑结构,物理结构,存储结构。

1.数组 :int[]  string[] 。ArrayList 。 List<int>  List<string>

         int[] array=new int[100];    

        优点:按照索引查询,遍历更加快捷方便

        缺点:大小固定,只能存储同一种类型的数据,添加删除慢。

        应用于:多次查询,对存储空间要求不大,很少出现增加与删除的情况。

        ArrayList  array=new ArrayList();

                array.Add(),

                array.Remove();

        List<int> array1=new List<int>;

                array1.Add();

                array1.Remove();

        //ArrayList和List属于动态数组,可以随时的添加以及删除元素。

        注意:ArrayList 存储的数据是 Object 类型,会涉及到装箱以及拆箱的操作。比较消耗性能。并且存储的数据可能是不安全的类型。

        《1》数组:数组类型的创建。

        

        <1>一维数组

        

        

        <2>二维数组

        

        

        

        <3>交错数组

        

        

        《2》ArrayList  数组

        

        

        Arraylist  小例子

        

        

        《3》List 泛型数组。确定类型,只能存储对应类型的数据。

        

        

2.栈(Stack)

        特点:先进后出,放入元素为进栈,取出元素为出栈。

        应用于:循环遍历的递归写法。

        《1》栈 Stack

        

        

        栈 小例子

        

    《2》泛型栈

        使用和栈类似。使用的时候需要指定类型。只能存储对应类型的数据。可以避免转型拆箱的操作。

        

3.队列(Queue)

        特点:先进先出,放入元素入队,取出元素出队。

        应用于:在多线程阻塞队列管理中适用。

        《1.》队列 queue

        

        

    《2》泛型队列

          使用和队列类似。使用的时候需要指定类型。只能存储对应类型的数据。可以避免转型拆箱的操作。

        

4.链表(Linked List)

        物理存储单元上非连续,非顺序的存储结构。数据元素的逻辑顺序是通过链表的指针地址实现的。每一个元素有数据域和指针域。根据指针指向分为:单链表,双链表,循环链表。

        优点:不需要初始化容量,可以任意的加减元素。加减元素的时候只需要改变前后两个元素的指针域的指向即可。

        缺点:占用空间较大,查询遍历等操作耗时。

        应用于:数据量小,需要频繁的加减操作的场景。     

        《1.》链表的连接原理。  

        

        《2》链表的原理。包括添加,移除元素。

        

        

        

        

        

        《3》C#封装的链表的基本用法。LinkedList  链表。  LinkedListNode   结点。

        

        

        

        

5.树(Tree):根朝上,叶朝下。

        1.每一个结点有0或者多个子节点 

        2.没有父结点的结点叫做根节点。

        3.每一个非根节点只有一个根节点。

        4.每一个子节点可以分为多个不相交的子树。        

《1》二叉树:树的一种特殊结构。

        1.每一个父结点最多有两个子节点。

        2.左子树,右子树是有顺序的,不可颠倒。

        3.即使是只有一个子节点,也要区分左子树和右子树。

        优点:二叉树继承了数组和链表的优势

        应用于:处理大量的动态的数据的时候后适用。

        拓展:二叉树又有平衡二叉树,红黑树,B+树等等。

6.图(Graph)

        结点的有穷集合V和边的集合E组成。按照顶点指向的方向可分为无指向向图和有指向向图。

        特点:在存储数据上有着较为复杂高效的算法。

        临近矩阵:邻接表,十字链表,邻接多重表,边集数组等存储结构。

7.堆(Heap):可以看做是完全二叉树

        1.堆中的某个节点的值总是不大于或者不小于父结点的值。

        2.堆是完全二叉树。

        3.根节点值最大的堆叫做大顶堆,反之称之为小顶堆。

               ki>k2i,ki>k(2i+1)                    ki<k2i,ki<k(2i+1)

8.散列表【哈希表】(Hash)   Hashtable       Dictionary

        根据 关键码 和 值(key,value)进行访问。通过key,value 映射到集合的某一个位置。

        记录的存储 位置 == f(key),f 为散列函数【哈希函数】。通过散列函数将key通过算法转成一个整形数字,然后该数字对数组的长度进行取余,取余的结果当作数组的下标,将value存储到以该数字为下标的数组空间里。

        优点:查找元素很快

        缺点:增加删除元素的操作很慢。

        拉链法:数组+链表(后改为数组+红黑树)。数组的每一个成员包含一个指针,指针指向一个链表的表头。指向的链表可能为空,也可能有很多链结点。

        《1》Hashtable

        

        

        《2》Dictionary  字典 。确定 key ,value 的类型。只能存储对应类型的数据,只能以对应类型为key进行索引。

        

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值