Lesson1——数据结构前言

news2024/10/7 6:46:30

前言:

        今天我们正式开始一个新的专栏——初阶数据结构(C语言实现),本专栏后续持续更新时间复杂度空间复杂度、顺序表、链表、栈和队列、二叉树、排序等算法的相关知识,欢迎大家互相学习,可以私信互相讨论哦!

目录:

1. 基本概念和术语

2. 什么是数据结构

3. 什么是算法

4. 数据结构和算法的重要性

5. 如何学好数据结构和算法


一、基本概念和术语

1、数据(Data)

        (1)是所有能输入计算机且能被计算机程序处理的各种符号的集合;

        (2)是对客观事物的符号表示;

        (3)信息的载体;

        (4)能够被计算机识别、存储和加工;

        (5)数据的含义广泛,包括:①数值型数据——整数、实数等;②非数值型数据——文字、图像、声音等。

2、数据元素(data element)

        (1)是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理;(例如:学生表中一个学生的信息为一个数据元素)

        (2)也称为元素。或称为记录、结点或顶点;

        (3)一个数据元素可由若干个数据项组成。(例如:学生表中一个学生信息为一个数据元素,而学生信息中的每一项(如姓名、年龄等)为一个数据项)

3、数据项

        (1)构成数据元素的不可分割的最小单位;

        (2)数据、数据元素、数据项三者之间的关系:数据 > 数据元素 > 数据项(如:学生表 > 学生信息 > 学号、姓名等)

4、数据对象(data obiect)

        (1)数据对象

                ①是性质相同的数据元素的集合,是数据的一个子集;

                例如:整数数据对象是集合 N = {0,1,-1, 2,-2……}

        (2)数据元素与数据对象

                ①数据元素——组成数据的基本单位,与数据的关系:是集合的个体;

                ②数据对象——性质相同的数据元素的集合,与数据的关系是:集合的子集。

二、什么是数据结构

1、数据结构(data structure)

       (1)数据结构是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的数据元素的集合。

        (2)数据元素不是孤立存在的,它们之间存在着某种关系,数据元素相互之间的关系称为结构

        (3)或者说,数据结构是带结构的数据元素的集合。

        (4)数据结构的形式定义为:数据结构是一个二元组

                Data Structure = (D,R)

        其中:D是数据元素的有限集,S是D上关系的有限集。

2、数据结构包括以下三个方面的内容:

        (1)结构定义中的“关系”描述的是数据元素之间的逻辑关系,也称为逻辑结构。

        (2)数据结构在计算机中的表示(又称映像),称为数据的物理结构或存储结构。(它包含数据元素的表示和关系的表示)

       (3)数据的运算和实现,即对数据元素可以实施的操作以及这些操作在相应的存储结构上的实现。

3、数据结构的两个层次

        (1)逻辑结构

                ①描述数据元素之间的逻辑关系;

                ②与数据的存储无关,独立于计算机;

                ③是从具体问题抽象出来的数学模型。

        (2)存储结构(物理结构)

                ①数据元素及其关系在计算机存储器中的结构(存储方式)

                ②是数据结构在计算机中的表示

        (3)逻辑结构与存储结构的关系:

                ①存储结构是逻辑关系的映像与元素的映像;

                ②逻辑结构是数据结构的抽象,存储结构是数据结构的实现;

                ③两者综合起来建立了数据元素之间的结构关系

4、逻辑结构的种类

划分方法一:

        (1)线性结构:有且仅有一个开始和一个终端结点,并且所有结点都最多只有一个直接前趋和一个直接后趋。(例如:线性表、栈、队列、串)

        (2)非线性结构:一个结点可能有多个直接前趋和直接后趋。(例如:树、图)

划分方式二 —— 四类基本逻辑结构

        (1)集合结构:结构中的数据元素之间除了同属一个集合的关系外,无任何其它关系。

        (2)线性结构:结构中的数据元素之间存在一对一的线性关系。

        (3)树形结构:结构中的数据元素之间存在着一对多的层次关系。

        (4)图状结构或网状结构:结构中的数据元素之间存在多对多的任意关系。

5、存储结构的种类

四种基本的存储结构:

        (1)顺序存储结构:

                ①用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系由元素的存储位置来表示。

                ②C语言中用数组来实现顺序存储结构,例如:

        (2)链式存储结构:

                ①用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系用指针表示。

                ②C语言中指针来实现链式存储结构,例如:

        (3)索引存储结构

        (4)散列存储结构

总结:数据结构 —— 就是在内存中管理数据。

三、什么是算法

1、算法(algorithm)的定义:

        算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中指令表示一个或多个操作。

        简而言之:算法就是一系列的计算步骤,用来输入数据转化成输出结果。

 2、算法的描述:

        (1)自然语言:中文、英文等

        (2)流程图:传统流程图、NS流程图

        (3)伪代码:类语言——类C语言

        (4)程序语言:C语言

3、算法特性:

算法特性:一个算法必须具备以下五个重要特性

        (1)有穷性:一个算法必须总是在执行又穷步之后结束,且每一步都在又穷时间内完成。

        (2)确定性:算法中的每一条指令必须有确切的含义,没有二义性,在任何条件下,只有唯一的一条执行路径,即对于相同的输入只能得到相同的输出。

        (3)可行性:算法是可行的,算法描述的操作可以通过已经实现的基本操作执行有限次来实现。

        (4)输入:一个算法有零个或多个输入。

        (5)输出:一个算法有一个或多个输出。

4、算法设计的要求

        (1)正确性(correctness):算法满足问题要求,能正确解决问题;

        算法转化为程序后要注意:

        ①程序中不含语法错误;

        ②程序对于几组输入数据能够得出满足要求的结果;

        ③程序对于精心选择的、典型、苛刻且带有刁难性的几组输入数据都能得出满足要求的结果

        ④程序对于一切合法的输入数据都能得出满足要求的结果。

                通常以第三层意义上的正确性作为衡量一个算法是否合格的标准。

        (2)可读性(readability):

              ①算法主要是为了人的阅读和交流,其次才是为计算机执行,因此算法应该易于人的理解

              ②另一方面,晦涩难读的算法易于隐藏较多错误而难以调试

        (3)健壮性(robustness):

                ①指当输入非法数据时,算法恰当的做出反应或进行相应处理,而不是产生莫名其妙的输出结果。

                ②处理出错的方法,不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。

        (4)高效性(efficency):要求花费尽量少的时间和尽量低的存储要求。

5、算法与程序

        (1)算法:就是一系列的计算步骤,用来将输入数据转化成输出结果,一个问题可以有多种算法。

        (2)程序:就是用某种程序语言对算法的具体实现。

                        程序 = 数据结构 + 算法

                ①数据结构通过算法实现操作

                ②算法根据数据结构设计程序

四、数据结构和算法的重要性

1、数据结构是计算机软件相关专业的专业基础课

2、在教学计划中的地位:核心、承上启下的课程

3、考研:必考专业;

4、找工作面试,笔试的重点考核内容

总结:类似与练武的“内功”!

五、如何学好数据结构和算法

1、死磕代码:不要光想,要多多上机练习。

2、注意画图和思考:数据结构是复杂的,所以我们要多动手画图,多思考帮助我们理解。

数据结构的一些基础概念和术语我们就学完了,下一次我们开始正式讲解时间复杂度空间复杂度。

如果有错误,可以私信,互相讨论哦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/552285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一次oracle环境 enq: TX - allocate ITL entry锁问题分析

enq: TX - allocate ITL entry锁问题分析 通过分析问题时间段两个节点的AWR报告,TOP1等待为锁竞争enq: TX - allocate ITL entry,该等待事件是由于缺省情况下创建的表的INITRANS参数为1,索引的INITRANS参数值为2.当有太多的并发DML操作的数据行处于相同的…

日志模块封封装:单例模式+策略模式+构建者模式+bugly

日志模块封封装:单例模式策略模式构建者模式bugly 一.单例模式策略模式构建者模式二.日志模块封装1.日志等级:LoggerLevel枚举类2.日志输出类型:LoggerType枚举类3.ILogger接口4.LogCatLogger/FileLogger/NetWorkLogger/EmailLogger5.使用构建者模式创建…

相同格式相同分辨率图片不同大小分析

1、问题 有三张图片,如下: 这三张图片均为jpg格式,分辨率均为1851*580,肉眼看不出区别。但是大小不同。 2号为217KB,4号为1.15MB,5号为1.06MB。 我们看下常规信息,先看2号: 可以…

初识Linux:第五篇

初识Linux:第五篇 初识Linux:第五篇1.Linux下的用户2.Linux权限管理2.1文件权限管理2.2文件权限的更改2.21改变文件访问权限属性2.22改变文件的身份 3.三个问题 总结 初识Linux:第五篇 😁本篇主要介绍Linux权限的相关知识&#x1…

vue+elementui+nodejs高校校园在线打印预约系统

在线提交文档进行打印 首页简单介绍系统 语言 node.js 框架:Express 前端:Vue.js 数据库:mysql 数据库工具:Navicat 开发软件:VScode 顶部或主页按钮转到打印 用户可以登录 查看历史打印记录 用户分学生和非学生 学生可以享有优惠…

基于.NetCore开源的Windows的GIF录屏工具

推荐一个Github上Start超过20K的超火、好用的屏幕截图转换为 GIF 动图开源项目。 项目简介 这是基于.Net Core WPF 开发的、开源项目,可将屏幕截图转为 GIF 动画。它的核心功能是能够简单、快速地截取整个屏幕或者选定区域,并将其转为 GIF动画&#x…

编写 ROS 消息发布订阅器(五)

执行命令,指定目录添加cpp文件 cd ~/catkin_ws/src/beginner_tutorials如果没有src目录, 就自己创建一个目录叫src cd src/ vim talker.cpp 复制代码粘贴: #include "ros/ros.h" #include "std_msgs/String.h" int m…

C++/R 期末冲刺3h

C 1. 基础程序 #include "iostream" // C头文件 #include "stdio.h" // C 头文件 //using namespace std; // 命名空间// main() 是程序开始执行的地方int main() {std::cout << "Hello, World!" << "\n";return 0; …

【数据结构】线性结构 之 顺序表

&#x1f331;博客主页&#xff1a;大寄一场. &#x1f331;系列专栏&#xff1a;数据结构与算法 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 目录 前言 顺序表概念及结构 静态代码实现&#xff1a; 动态代码实现&#xff1a; SeqList.h文件 SeqLi…

使用VitePress和Github搭建个人博客网站,可以自动构建和发布

之前我们写过一篇关于如何自动构建和发布个人博客的文章&#xff0c;当时是使用VuePress和GitLab。GitLab持续集成部署CI/CD初探&#xff1a;如何自动构建和发布个人前端博客 现在换了Vue3和Vite&#xff0c;使用VitePress在Github上又搭建了一个博客。博客地址&#xff1a; …

博弈Ai官网ChatGPT能力真实测评

链接&#xff1a;https://chat.bo-e.com/&#xff08;基于ChatGPT4和3.5研发的智能聊天机器人国产镜像&#xff09; 一&#xff0c;博弈Ai的UI设计样式 1、博弈Ai&#xff08;ChatGPT&#xff09;白天模式 2、博弈Ai&#xff08;ChatGPT&#xff09;黑天模式 3、博弈Ai&#x…

五、c++学习(加餐1:汇编基础学习)

经过前面几节课的学习&#xff0c;我们在一些地方都会使用汇编来分析&#xff0c;我们学习汇编&#xff0c;只是学习一些基础&#xff0c;主要是在我们需要深入分析语法的时候&#xff0c;使用汇编分析&#xff0c;这样会让我们更熟悉c编译器和语法。 从这节课开始&#xff0c…

【003hive基础】hive的数据类型

文章目录 一.数据类型1. 基础数据类型2. 复杂数据类型 二. 显式转换与隐式转换三. hive的读时模式 一.数据类型 1. 基础数据类型 2. 复杂数据类型 array: 有序相同数据类型的集合。 arrays(1, 2)map : key必须是基本数据类型&#xff0c;value不限。 map(‘a’, 1, ‘b’, 2)s…

线性回归、正规方程和梯度下降法

一、线性回归简介 1.定义与公式 线性回归是利用回归方程(函数)对一个或多个自变量(特征值)和因变量(目标值)之间关系进行建模的一种分析方式。 特点&#xff1a;只有一个自变量的情况称为单变量回归&#xff0c;多余一个自变量情况的叫做多元回归 通用公式&#xff1a; y …

javascript基础三:谈谈 JavaScript 中的类型转换机制

一、概述 JS中有六种简单数据类型&#xff1a;undefined、null、boolean、string、number、symbol&#xff0c;以及引用类型&#xff1a;object 但是我们在声明的时候只有一种数据类型&#xff0c;只有到运行期间才会确定当前类型 let name y?allen:1上面代码中&#xff0c…

2023年NOC大赛创客智慧编程赛项Python 复赛模拟题(二)

题目来自:NOC 大赛创客智慧编程赛项Python 复赛模拟题(二) NOC大赛创客智慧编程赛项Python 复赛模拟题(二) 第一题: 编写一个成绩评价系统,当输入语文、数学和英语三门课程成绩时,输出三门课程总成绩及其等级。 (1)程序提示用户输入三个数字,数字分别表示语文、数学、…

ChatGPT-4 镜像网站推荐

文章目录 1. TomChat2. Ai Doge3. 二狗问答4. 小莓用AI5. Ora6. 未知名字7. VIVI-AI8. ATALK9. ChatGPT Web10 AIchatOS 什么是ChatGPT? ChatGPT&#xff0c;全称&#xff1a;聊天生成预训练转换器&#xff08;英语&#xff1a;Chat Generative Pre-trained Transformer&#…

抓取领域相关论文及摘要

抓取规划问题是指确定物体与手指间的一系列接触位置&#xff0c;使得手指能抵抗任意外力且灵活操作物体的能力。传统的基于分析的抓取规划需要根据已知的被抓物体模型根据力闭合的条件判断抓取的好&#xff0c;这种方法只适合对已知的物体进行抓取。 然而日常生活中有很多相似…

MyBatis 中的动态 SQL 是什么?它的作用是什么?

MyBatis 中的动态 SQL 是一种允许在 SQL 语句中根据不同的条件动态生成 SQL 语句的技术。它可以根据不同的条件生成不同的 SQL 语句&#xff0c;从而达到灵活构建 SQL 语句的目的。动态 SQL 可以减少代码的重复度&#xff0c;提高代码的可维护性和可读性。 动态 SQL 使用 OGNL…

如何在MyBatis中处理复杂结果集映射关系

文章目录 前言一、 准备工作二、resultMap处理字段和属性的映射关系三、多对一映射0、级联方式处理映射关系1、使用association处理映射关系2、分步查询解决多对一关系(1) 查询员工信息(2) 根据员工所对应的部门id查询部门信息延迟加载 三、一对多的关系处理0、使用collection来…