首页 > 其他分享 >数据结构:基本概念及术语

数据结构:基本概念及术语

时间:2024-09-29 22:51:21浏览次数:8  
标签:存储 复杂度 元素 术语 算法 数据结构 数据 基本概念 结构

一、基本概念

        在数据结构中,有这样一些基本概念:数据、数据元素、数据项、数据对象,对于它们的具体含义我就不赘述了,在这就简要说明一下它们之间的关系

        首先,我们可以把数据看成一个大集合,那数据元素就相当于这个集合中的一个个元素,然后一些性质相同的数据元素组成一个个小集合,也就是一个个数据对象,而这些数据对象是被数据这个大集合包含着的,所以数据对象就是数据的子集。

        至于数据项,则是数据元素的最小单位,是不可分割的(通常情况下),但在特殊情况或不同层次下可以被再一次细分。

        总的来讲就是:数据 > 数据对象 > 数据元素 > 数据项。

二、术语

        1、结构相关术语

        结构相关术语有:数据结构、逻辑结构、存储结构(物理结构),这三个术语之间也有一定的关联。首先,数据结构包含逻辑结构和存储结构;其次,逻辑结构是数据结构的抽象;最后,存储结构是逻辑结构在计算机的具体实现。

        现在我们来看一下逻辑结构,它是可以被细分的,一种是分为线性结构和非线性结构,另一种则是分为集合结构、线性结构、树状结构和图状结构。这是它们的一些含义:

前一种:

        线性结构:有且只有一个起始节点和终端节点,并且每个节点最多只有一个直接前趋和直接后继;

        非线性结构:每个节点可能有多个直接前趋和直接后继。

后一种:

        集合结构:结构中的数据元素之间除同属于一个集合外,再无任何关系;

        线性结构:结构中的数据元素之间存在一对一的线性关系;

        树状结构:结构中的数据元素之间存在一对多的关系;

        图状结构:结构中的数据元素之间存在多对多的关系。

        接下来就是存储结构了,它可以被分为顺序存储结构、链式存储结构、索引存储结构和散列存储结构,这里着重讲的是前两种存储结构,含义如下:

        顺序存储结构:用一组连续的存储单元依次存储数据元素,并用元素的存储关系来表示数据元素之间的逻辑关系;

        链式存储结构:用一组任意的存储单元来存储数据元素,并用指针将其链接起来.

        在实际应用中,对于这么多种存储结构,我们自然要进行选择,至于要选择哪种存储结构,则需要你了解这些存储结构的优点与缺点后,才能更好地进行选择。正所谓“知己知彼,百战不殆”,当你了解这些存储结构的利弊后,就能更好地根据实际情况来分析究竟要用哪种数据结构了。下面就是前两种存储结构的一些优缺点:

         顺序存储结构

                优点:1、存储密度大;

                           2、进行随机存取,一步计算就能得到任意元素的地址。

                缺点:1、在进行删除和插入操作时,需要移动大量元素,效率低下;

                           2、不便于动态扩展。

        链式存储结构:

                优点:1、进行删除和插入操作时,不需要移动大量元素;

                           2、便于动态扩展。

                缺点:1、存储密度小;

                           2、进行顺序存取,无法快速得到任意元素的地址。

          2、运算相关术语

        运算相关术语有数据的运算算法,其中常见运算有:插入、删除、查找、排序等,而对于算法,我们则有如下要求:正确性、可读性、健壮性和高效性。

        这些要求的意思也很好理解,顾名思义,正确性就是保证自己的代码结果是正确的;可读性就是让自己的代码能更容易被人看懂;健壮性则是在面对异常情况时仍能正常运行;最后的高效性是让自己的代码所花费的时间更少。

        当然,这些要求也有分轻重缓急,最紧要的是保证算法的正确性,最后的最后才是高效性。谈到高效性,自然也少不了时间复杂度空间复杂度,这两个可谓是衡量算法效率的重要指标。

        那如何用它们来判断算法效率呢?如果是时间复杂度的话,就看执行次数最多的那个语句,也就是基本语句,根据基本语句执行的次数就可以判断出时间复杂度,例如:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	int n = 0;
	scanf("%d", &n);

	for (i = 0; i < n; i++)
	{
		j++;//基本语句
	}

	printf("%d\n", j);//结果为所输入的值

	return 0;
}

        这是在 vs2022 下用 C 语言写的代码,从中我们可以看出 j++; 这个语句执行次数最多,所以该语句就是基本语句,总共执行了 n 次,那么时间复杂度就是 n,由于时间复杂度用大 O 符号表示,所以可记为 O(n) 。还有一点就是,如果一个基本语句执行次数为 n * 1/2,那也要记为 O(n),其他的情况也可由此推断。

        空间复杂度则是根据算法所用的额外存储空间来判断,也用大 O 符号表示。注意,这里的额外存储空间不包括输入数据本身所占的空间,只考虑算法所用的辅助空间。

        到这,我们可以发现,时间复杂度越小,那耗费的时间就越少,算法效率就越高,空间复杂度也是同理。那为了提高算法效率,我们自然是希望这两个复杂度越小越好,但在某些情形下,我们不可避免地要对其进行选择,因为此时若是减小时间复杂度,空间复杂度就会增大,而若是减小空间复杂度,就会使时间复杂度增大。对此,我们需要对实际情况有充分地了解,进而更好地根据实际情况来进行选择,找到其中的平衡点。

附:若有不足,望指出。

        ^_^感谢^_^

标签:存储,复杂度,元素,术语,算法,数据结构,数据,基本概念,结构
From: https://blog.csdn.net/2401_85816985/article/details/142306941

相关文章

  • 97th 2024/8/26 树形数据结构小结
    精锐线段树\(\big/\)平衡树综合题目五步取首1、每个节点需要维护的信息有?可从题目要求的目标或经推导后得到的要求的目标得到如对于括号序列这一题,将"("转化为-1,")"转化为1后,要求的答案就变成了最大前缀和和最小后缀和然后就变成了平衡树板题(区间赋值,反转,翻转)2、需要的标记......
  • 【Redis基础篇】超详细♥Redis安装教程、5种常用数据结构和常见命令、Jedis和SpringDa
    文章目录一、Redis与客户端安装教程1、NoSQL介绍(1)结构化与非结构化(2)关联和非关联(3)查询方式(4)事务(5)总结2、Redis介绍3、安装Redis(1)依赖库(2)上传安装包并解压(3)Redis三种启动方式①默认启动②指定配置启动③开机自启4、Redis客户端(1)Redis命令行客户端(2)图形化桌面客户端(3......
  • Java中的队列数据结构及其应用
    Java中的队列数据结构及其应用队列是一种线性数据结构,遵循先进先出(FIFO)的原则,即最先插入的元素最先被移除。队列的基本操作包括入队(enqueue)、出队(dequeue)和查看队头元素(peek)。本文将介绍队列的基本结构、操作及在JDK中的应用。队列的基本结构一个简单的队列可以用数组或......
  • Java-数据结构-Map和Set-(二)-哈希表 |ू・ω・` )
    文本目录:❄️一、哈希表:  ☑1、概念:    ☑2、冲突-概念:    ☑3、冲突-避免:     ☞1)、避免冲突-哈希函数的设计:     ☞2)、避免冲突-负载因子调节(重点):    ☑4、冲突-解决:      ➷1)、解决冲突-闭散列: ......
  • 数据结构————顺序表
    1.线性表什么是线性表呢大家往下面看:其实线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的数据结构,常⻅的线性表:顺序表、链表、栈、队列、字符串(线性表在逻辑上是线性结构,也就说是连续的⼀条直线。但是在物理结构上并不⼀定是......
  • 数据结构(顺序表)
    无论你期望或者不期望,清晨依旧来临。--谏山创《进击的巨人》线性表的概念1.线性表是n个具有相同特性的数据元素的有限序列。2.线性表在逻辑上是线性结构,但是在物理结构上并不⼀定是连续的。3.线性表在物理上存储时,通常以数组和链式结构的形式存储。顺序表的概念......
  • 算法实战:剖析 Redis 常用的数据类型对应的数据结构
    算法实战:剖析Redis常用的数据类型对应的数据结构Redis是一个非常流行的内存数据库,它提供了多种数据类型,每种数据类型都有其特定的数据结构支持。了解这些数据结构对于深入理解Redis的工作原理和优化使用非常重要。本文将剖析Redis常用的数据类型对应的数据结构,并通......
  • 【 机器学习】基本概念简介
    机器学习人工智能的三大概念人工智能AIAI是研究智能操作的计算代理AI是使用计算机来模拟而不是人脑机器学习ML使计算机能够在无需明确编程的情况下进行学习的研究领域深度学习DL也叫深度神经网络,大脑仿生,设计一层一层的神经元模拟万事万物他们之间的关......
  • 18年408数据结构
    第一题:解析:这道题很简单,按部就班的做就可以了。画出S1,S2两个栈的情况:S1:      S2:                    2        +        3        -        8        *......
  • 数据结构设计
    数据结构设计设计有setAll功能的哈希表加时间戳#include<vector>#include<iostream>#include<algorithm>#include<unordered_map>usingnamespacestd;//<key,<val,time>>unordered_map<int,pair<int,int>>map;intsetA......