IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构的那点事儿 -> 正文阅读

[数据结构与算法]数据结构的那点事儿

目录

一、前言

二、基本概念和语术

(一)、基本概念

(二)、笔者的提醒

(三)、数据结构

三、数据结构

(一)、逻辑结构

(二)、物理结构

四、数据类型和抽象数据类型

(一)、数据类型

(二)、抽象数据类型(ADT)

1、概念

2、抽象数据类型定义格式

3、抽象数据类型的表示与实现


一、前言

本文主要是数据结构与算法的一些总结,此文章的目的主要是记录学习过程,

二、基本概念和语术

(一)、基本概念

1、数据:是描述客观事物的符号,是能够输入到计算机能被计算机处理的符号集合。它 不仅包括数值类型也包括声音、图像、视频等非数值类型。
2、数据元素:在计算机中具有一定意义的数据的基本单位,一般在计算机中作整体处理,有时候也被叫做记录、结点、顶点。
3、数据项:组成数据元素的最小的不可分割的最小单位。
4、数据对象:具有相同性质的数据元素的集合。

(二)、笔者的提醒

?1. 上述名词表示的范围大小是:数据>数据对象>数据元素>数据项
?2. 数据对象是数据的子集,数据元素是数据的个体。

(三)、数据结构


相关书籍上的定义是这样说的:数据元素之间的关系叫做结构。数据结构是相互之间存在一种或多种特定关系的数据元素集合,或是指带结构的数据元素的集合。简单来说其实就是具有一些特定关系(结构)的数据,而不是杂乱无章的。

三、数据结构

(一)、逻辑结构

1、集合结构
数据结构中的数据元素除了属于同一个集合没有其他的任何关系的数据结构。

2、线性结构
数据结构中的数据元素存在一对一的线性关系

3、树型结构
数据结构中的数据元素存在一对多的层次关系

4、网状结构
数据结构中的数据元素之间存在着多对多的任意关系

(二)、物理结构

物理结构就是数据的逻辑结构在电脑中的存储结构,分为下面四类:
顺序存储结构
链式存储结构
索引存储结构
散列存储结构
1、顺序存储结构:是用一组连续的存储单元存储数据元素。其中元素间的逻辑关系跟物理关系一致。例如在C语言中用数组来实现。
2、链式存储结构:是不需要提前准备好连续的存储空间,二十用链表来实现,链表中的指针指向下一个元素的地址。,显然这样就容易了很多了,对于元素的删除、添加、插入、调换都十分方便。

点击下方链接了解链表知识
链表的应用举例_故里?927的博客-CSDN博客链表的应用:建立头结点,插入新结点,输出链表,删除结点https://blog.csdn.net/qq_64836447/article/details/126715412
3、索引存储结构:它除了要建立存储结点信息,还建立附加的索引表,索引表由若干索引项组成。这也就体现了它的缺点是增加了附加的索引表,会占用较多的存储空间。
4、散列存储结构:是一种将数据元素的存储位置与关键码之间建立确定的对应关系的查找方式。根据结点的关键字直接计算出这一结点的存储位置(地址)。

四、数据类型和抽象数据类型

(一)、数据类型

数据类型是一个值的集合和定义在这个值集上的一组操作的总称,每一个数据属于一个特定的数据类型,数据类型暗示了数据的取值范围、存储方式,以及允许进行的运算。

(二)、抽象数据类型(ADT)

1、概念

抽象数据类型一般是指自己定义的用于解决问题的数学模型,以及在模型上的一系列的操作的总称。

2、抽象数据类型定义格式

ADT 抽象数据类型名{
? ? 数据对象:<定义数据对象>
? ? 数据关系:<定义数据关系>
? ? 基本操作:<定义基本操作>
}ADT 抽象数据类型名

注:*数据对象和数据关系的定义都是用伪代码来表示的,就是自然语言与和数学符号来说明即? ? ? ? ? ? ? ?可。

????????*基本操作的定义则是如下形式:

基本操作名(参数表)

初始条件:<初始条件描述>

操作结果:<操作结果描述>

?上述基本操作中的参数表分为赋值参数和引用参数。

赋值参数的作用是为操作提供输入值。

引用参数以&开头,既提供输入,还可返回操作结果。

笔者自己的理解就是当我们的已有的数据类型不能直接来定义我们想要的变量,这个时候抽象数据类型就派上用场了。还有一个就是很多初学者会想这个定义格式都是自然语言和数学符号来用伪代码的形式写出来的,它在编译器中怎么运行,笔者提醒一下,其实这个定义格式是书面书写出来的,也就是说是人写出来仅供查看了解即可,并不是要在编译器中运行滴。比如你现在的代码中定义了一个复数这样的抽象数据类型,其他人看来后不知道是什么,你把你自己写的复数的这一抽象数据类型的定义拿给他看看,他便明白了你这个复数抽象是数据类型的对象,关系,以及操作都有哪些。这也便是抽象数据类型定义的意义所在啦。

3、抽象数据类型的表示与实现

下面用复数这一抽象数据类型来举例

代码举例:

#include"stdio.h"
typedef struct 
{
	float Realpart;
	float Imagepart;
}complex;
//创建一个复数
complex Creat(float x, float y);
//获得复数的实部
float GetReal(complex c);
//获得数据的虚部
float GetImage(complex c);
//求两个复数的和
complex Add(complex c1, complex c2);
//求两个复数的差
complex difference(complex c1, complex c2);
void main(void)
{
	complex c1,c2,c3,c4;
	c1= Creat(1.0, 2.0);
	c2 = Creat(3.0, 4.0);
	GetReal(c1);
	GetImage(c2);
	c3=Add(c1, c2);
	c4=difference(c1, c2);
	printf("c1=%f+(%f)i\n", c1.Realpart, c1.Imagepart);
	printf("c2=%f+(%f)i\n", c2.Realpart, c2.Imagepart);
	printf("c3=%f+(%f)i\n", c3.Realpart, c3.Imagepart);
	printf("c4=%f+(%f)i\n", c4.Realpart, c4.Imagepart);
}
//创建一个复数
complex Creat(float x, float y)
{
	complex c;
	c.Realpart = x;
	c.Imagepart = y;
	return c;
}
//获得复数的实部
float GetReal(complex c)
{
	return c.Realpart;
}
//获得数据的虚部
float GetImage(complex c)
{
	return c.Imagepart;
}
//求两个复数的和
complex Add(complex c1, complex c2)
{
	complex c;
	c.Realpart = c1.Realpart + c2.Realpart;
	c.Imagepart = c1.Imagepart + c2.Imagepart;
	return c;
}
//求两个复数的差
complex difference(complex c1, complex c2)
{
	complex c;
	c.Realpart = c1.Realpart - c2.Realpart;
	c.Imagepart = c1.Imagepart - c2.Imagepart;
	return c;
}

?执行结果:

?上面可以看出具体想要实现抽象数据类型的“问世”还是靠函数。复数这一抽象数据类型的基本操作都是函数来表现出来的。说白了就是很多函数拼出了抽象数据类型。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:52:38  更:2022-09-21 00:56:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 18:20:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计