首页 > 其他分享 >一数据结构

一数据结构

时间:2023-08-29 14:00:50浏览次数:39  
标签:结点 元素 数组 数据结构 数据 结构

1、数据结构(data structure)是带有结构特性的数据元素的集合,“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。 

2、逻辑结构包括: 

1)集合:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系
2)线性结构:数据结构中的元素存在一对一的相互关系
3)树形结构:数据结构中的元素存在一对多的相互关系
4)图形结构:数据结构中的元素存在多对多的相互关系
  3、数据存储结构 常用的存储结构有顺序存储链式存储索引存储哈希存储等 数据的顺序存储结构的特点是:借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系;非顺序存储的特点是:借助指示元素存储地址的指针表示数据元素之间的逻辑关系   4、分类 数据结构有很多种,一般来说,按照数据的逻辑结构对其进行简单的分类,包括线性结构非线性结构两类

线性结构

简单地说,线性结构就是表中各个结点具有线性关系。如果从数据结构的语言来描述,线性结构应该包括如下几点:

1、线性结构是非空集

2、线性结构有且仅有一个开始结点和一个终端结点。

3、线性结构所有结点都最多只有一个直接前驱结点和一个直接后继结点。

线性表就是典型的线性结构,还有栈、队列和串等都属于线性结构。

非线性结构

简单地说,非线性结构就是表中各个结点之间具有多个对应关系。如果从数据结构的语言来描述,非线性结构应该包括如下几点:

1、非线性结构是非空集。

2、非线性结构的一个结点可能有多个直接前驱结点和多个直接后继结点。

在实际应用中,数组、广义表树结构和图结构等数据结构都属于非线性结构。

常用数据结构

数组(Array)

数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。数组可以说是最基本的数据结构,在各种编程语言中都有对应。一个数组可以分解为多个数组元素,按照数据元素的类型,数组可以分为整型数组、字符型数组、浮点型数组、指针数组和结构数组等。数组还可以有一维、二维以及多维等表现形式。

栈( Stack)

栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。栈按照先进后出或后进先出的原则来存储数据,也就是说,先插入的数据将被压入栈底,最后插入的数据在栈顶,读出数据时,从栈顶开始逐个读出。栈在汇编语言程序中,经常用于重要数据的现场保护。栈中没有数据时,称为空栈。

队列(Queue)

队列和栈类似,也是一种特殊的线性表。和栈不同的是,队列只允许在表的一端进行插入操作,而在另一端进行删除操作。一般来说,进行插入操作的一端称为队尾,进行删除操作的一端称为队头。队列中没有元素时,称为空队列。

链表( Linked List)

链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。链表由一系列数据结点构成,每个数据结点包括数据域和指针域两部分。其中,指针域保存了数据结构中下一个元素存放的地址。链表结构中数据元素的逻辑顺序是通过链表中的指针链接次序来实现的。

树( Tree)

树是典型的非线性结构,它是包括,2个结点的有穷集合K。在树结构中,有且仅有一个根结点,该结点没有前驱结点。在树结构中的其他结点都有且仅有一个前驱结点,而且可以有两个后继结点,m≥0。

图(Graph)

图是另一种非线性数据结构。在图结构中,数据结点一般称为顶点,而边是顶点的有序偶对。如果两个顶点之间存在一条边,那么就表示这两个顶点具有相邻关系

堆(Heap)

堆是一种特殊的树形数据结构,一般讨论的堆都是二叉堆。堆的特点是根结点的值是所有结点中最小的或者最大的,并且根结点的两个子树也是一个堆结构。

散列表(Hash)

散列表源自于散列函数(Hash function),其思想是如果在结构中存在关键字和T相等的记录,那么必定在F(T)的存储位置可以找到该记录,这样就可以不用进行比较操作而直接取得所查记录。

 

常用算法

(1)检索。检索就是在数据结构里查找满足一定条件的节点。一般是给定一个某字段的值,找具有该字段值的节点。

(2)插入。往数据结构中增加新的节点。

(3)删除。把指定的结点从数据结构中去掉。

(4)更新。改变指定节点的一个或多个字段的值。

(5)排序。把节点按某种指定的顺序重新排列。例如递增或递减。

 

标签:结点,元素,数组,数据结构,数据,结构
From: https://www.cnblogs.com/bql123456/p/17664570.html

相关文章

  • 【数据结构与算法】TypeScript 实现图结构
    classGrapg<T>{//用于存储所有的顶点verteces:T[]=[];//用于存储所有的边采用邻接表的形式adjList:Map<T,T[]>=newMap();//添加顶点addVertex(v:T){this.verteces.push(v);//初始化顶点的邻接表this.adjList.set(v,[]);}......
  • 栈和队列在数据结构中的应用
    文章目录理解栈和队列的概念及其特点栈的应用和操作队列的应用和操作结论......
  • 数据结构与算法:计算机科学的基石
    文章目录数据结构:构建数据的框架算法:问题的解决方案编程语言:实现数据结构的工具结论......
  • 大话数据结构笔记
    1.ADT:AbstractDataType抽象数据类型。2.算法的五个基本特性:输入,输出,有穷性,确定性和可行性。3.大O阶:a.用常数1取代运行时间中的所有加法常数。 b.在修改后的运行次数函数中,只保留最高阶项。c.如果最高阶存在且不是1,则去除与这个项......
  • 数据结构笔记
    2-3树&红黑树  哈希表哈希函数的设计例如26个字符new一个int[26]。可以用来做哈希整型值小范围正整数,直接使用正整数。大整数通常做法取模 比如取后四位mod1000模一个素数分布效果更好如果对日期这种取模,只能在01-31,会造成分布不均匀。要具体分析。浮点型3......
  • 数据结构与算法之美读书笔记
    读书笔记链接 时间复杂度分析只关注执行次数最多的一段代码加法法则:总复杂度等于量级最大的那段代码的复杂度乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积 最好、最坏、平均时间复杂度 数组内存中一块连续的存储空间,有效使用CPU的缓存机制,可以很方便......
  • Codeforces Round 888 (Div. 3)G. Vlad and the Mountains(数据结构,图论)
    题目链接:https://codeforces.com/contest/1851/problem/G 大致题意: 给出n个点m条边的无向图,每个点有点权h【i】。从点i到点j会消耗h【j】-h【i】的能量,如果小于0,那么就是恢复对应绝对值的能量。 进行q次询问,每次询问包含起点s,终点t,能量e,能量在移动过程中不能小......
  • Codeforces Round 887 (Div. 1)C. Ina of the Mountain(数据结构,反悔贪心)
    题目链接:https://codeforces.com/problemset/problem/1852/C 题意: 给定一个长度为n的序列和正整数k; 每次可以选取任意一个区间,将区间内每个数减1; 如果出现一个数变成0,那么那个数变成k; 问至少操作多少次可以使得每个数变成k; 分析: 将每个数值抽象为对应高度的......
  • 数据结构(数组模拟与STL)
    通过数组模拟栈intstk[N],top;voidinit(){//初始化 top=0;}boolisEmpty(){//判断是否为空 returntop==0;}boolisFull(){ returntop>=MAX-1;}voidpush(intx){if(isFull())//错误(上溢)stk[++top]=x;}intpop(){if......
  • Educational Codeforces Round 152 (Rated for Div. 2)E. Max to the Right of Min(数
    题目链接:https://codeforces.com/problemset/problem/1849/E 大致题意: 长度为n的序列,求有多少个区间满足区间最大值在区间最小值的右边? 解题思路: (此题有使用线段树等其他做法,本处使用的是单调栈做法) 我们先求出每个a【i】的左边的比他小的LMIN,左边比他大的LMAX,右......