数据结构---绪论

个人复习,欢迎指正!

参考教材《数据结构教程》(第五版)   李春葆主编        清华大学出版社 

1.1.1数据结构的定义

        数据:描述客观事物的数和字符的集合;

        数据元素:数据的基本单位;

        数据项:具有独立含义的数据最小单位,也成为字段或者域;

        数据对象:是指性质相同的数据元素的集合,他是数据的一个子集;

        数据结构:是指所有数据元素以及数据元素之间的关系,可以看作是相互存在关系的数据元素的集合;

        数据结构通产包括以下几个方面:

                1、数据的逻辑结构:由数据之间的逻辑关系构成;

                2、数据的存储结构:数据元素及其关系在计算机存储器中的存储表示,也称为数据的物理结构

                3、数据的运算:施加在该数据上的操作;

1.1.2 逻辑结构

        数据的逻辑结构是从数据元素的逻辑关系上描述数据的,是指数据元素之间的逻辑关系的整体,通常是从求解问题中提炼出来的;

1、逻辑结构的表示:

1、图标表示

               采用表格或者图形直接描述数据的逻辑关系;

如图所示,这7个学生记录和它们之间的相邻关系就构成了该数据的逻辑结构;

2、二元组表示

                一种通用的数据逻辑结构表示方式

B=(D,R)
B是一种数据逻辑结构,它由数据元素的集合D和D上的二元关系的集合R所组成

即:

 其中di表示D种第i个数据元素,n为D种数据元素的个数;rj表示集合R中的第j个关系,m为R中关系的个数

D为数据元素的集合,R为关系的集合

 R中的一个关系<x,y>(x,y∈D),表示x和y之间是相邻的......

x称为y的前驱元素,y为x的后继元素

若一个元素没有前驱元素,则称该元素开始元素,若某个元素没有后继元素,则称该元素为终端元素;

2、逻辑结构的类型

        1、集合

                数据元素之间除了“同属于一个集合”的关系,没有其他关系

        2、线性结构

                数据元素之间存在一对一的关系

                开始元素和终端元素都是唯一的

                除了开始元素和终端元素,其他元素都有且仅有一个前驱元素和后继元素

        3、树形结构

                数据元素之间存在一对多的关系

                除了开始元素之外,每个元素有且仅有一个前驱元素

                除了终端元素之外,每个元素有一个或多个后继元素

                比如二叉树

1.1.3存储结构

1、顺序存储结构

        采用一种连续的存储单元存放所有的数据元素,所有数据元素在存储器中占用一整块;

        逻辑结构上相邻,物理结构也相邻;

        优点:

        1、存储效率高;

        2、可实现随机存取(通过逻辑序号可以计算对应元素的存储地址)

        缺点:

        1、不便于修改,对元素的插入或删除可能需要移动一系列元素

附:

        顺序存储结构实现

        C语言代码设计结构体数组Stud并初始化,用于存储上文提到的学生表

struct student
{int  no;				//存储学号char name[8];			//存储姓名char sex[3];			//存储性别char Class[5];			//存储班号
}Stud[7] = { { 1,"张斌","男","9901" },{ 2,"xxx","女","9902" } };			
//已经完成初始化

2、链式存储结构

        每个逻辑元素采用一个内存节点存储,每个结点单独分配

        通过给结点附加指针域,用来表示元素之间的逻辑关系;

        首结点head用来表示链表,尾结点的指针域为空;

        优点:

        便于数据修改,对元素进行插入或删除操作时,仅需修改相应结点的指针域,不必移动结点;

         缺点:

        空间利用率较低,且逻辑上相邻的元素在存储空间不一定相邻,所以无法实现随机存储;

附:

        链式存储结构实现

typedef struct Studnode 
{int no;char name[8];char sex[3];char Class[5];struct Studnode * next;			//存储指向下一个学生结点的指针
}StudType;							//结点类型

 3、索引存储结构

        存储元素信息的同时,建立附加的索引表,前者成为主数据表,其中每个数据元素都有一个关键字和对应的存储地址;

        后者为索引表,其中的每一项为索引项,索引项的一般形式为“关键字,地址”

        关键字唯一标识一个元素,地址对应该关键字的元素在主数据表中的存储地址。

        优点:

        查找效率高;

        缺点:

        需要建立索引表,从而增建了空间开销;

4、哈希(或散列)存储结构

           根据元素的关键字通过哈希(或散列)函数直接计算出一个值,并将这个值作为该元素的存储地址;

        优点:

        查找速度快,只要给出代查元素的关键字就可立即查出对应存储地址,一般只适合要求对数据元素能够进行快速查找或插入的场合;

1.1.4数据运算

        数据运算是指对数据实施的操作

        常用的有:检索、插入、更新和排序

        数据运算最终需要在对应的存储结构上用算法实现

逻辑结构、存储结构和运算三者之间的关系:

 1.1.5数据类型和抽象数据类型

         数据类型:是一组性质相同的值得集合和定义在此集合上的一组操作的总称,或某种程序设计语言中已实现的数据结构;

 C/C++中常用的数据类型

 1、C/C++语言中的基本数据类型

        int型、bool型、char型、float型、double型等,略;

        例:数据类型是用来定义变量的:

int n;
该语句执行,系统自动为变量分配一个固定长度的存储空间,例如4个字节

        程序员可以通过变量名n,实现对这个内存空间进行存取,所以这种变量称之为自动变量

2、C/C++语言中的指针类型

        C/C++中借助指针类型,实现对地址的直接操作;

int i=2 ,* p=&i;
printf("%d\n",*p);
//i是指针变量,p为指针变量(用于存放某个整型变量的地址)
//表达式&i,表示变量i的地址,将p指向i的运算为 p=&i。

  3、C/C++语言中的数组类型

       数组是同一数据类型的数据元素的集合;

       数组名用于表示数组,下标指示一个数据元素在数组中的位置

       数组的下界:下标的最小值,在C/C++语言中从零开始

                   上界:数组的长度-1

4、C/C++语言中的结构体类型

        结构体类型是由一组被称为结构体的数据项组成的

声明结构体
struct Teacher
{int no;                        //成员编号char name[8];                  //成员姓名,占用8个字节int age;                       //成员年龄
};定义一个上述结构体类型Teacher的一个结构体变量t并赋值
struct Teacher t;
t.no=85;
strcpy(t.name,"张敏");
t.age=42;

        t变量所分配的内存空间大小为所有成员占用的内存空间之和

5、C/C++语言中的共用体类型 

        不同的成员组织为一个整体,它们在内存中共享一段存储单元,例如

union Tag
{
short int n;            //成员n,占用2个字节
char ch[2];             //成员ch数组,占两个字节
}

6、 C/C++语言中的自定义类型

        使用typedef关键字来指定一个数据类型,例如

typedef char ElemType;上述语句,可以将char与ElemType等同起来typedef struct Student
{int no;                    //学员成员char name;                //姓名成员char sex;                 //性别int cno;                   //班号成员
}NewType;                     //定义别名NewType等于Student结构体类型
NewType s1;    
等同于
struct Student s1;

存储空间的分配

ADT 抽象数据类型名
{数据对象: 数据对象的声明数据关系: 数据关系的声明基本运算: 基本运算的声明
}基本运算声明格式基本运算名(参数表):运算功能的描述
参数分为两种:1、值参数:    只为运算提供值2、引用参数:  以&开头,除了可以提供输入值以外,还将返回运算结果

        1、静态存储空间分配方式

                在程序编译期间分配固定的存储空间的方法

        例如: int  a[10];

        属于自动变量,一旦遇到该语句,系统便为其分配10个int整型空间,不管a中有无元素,空间也已分配;

        2、动态存储空间分配方式

                在程序运行期间根据需要动态地分配存储空间;

         例如:使用malloc()函数为一个指针变量分配一个连续空间,不再需要时使用free()释放p所指空间;

char *p;
p = (char *)malloc(10 *sizeof(char));       //动态分配10个连续的字符空间
strcpy(p,"china");                          //将china存放到p所指向的空间
printf("%c\n",*p);                          //输出字符c
printf("%s\n",p);                           //输出字符串
free(p);                                    //释放空间

 2、抽象数据类型

        抽象数据类型,用户进行软件系统设计时从问题的数学模型中抽象出来的逻辑数据结构和逻辑数据结构上的运算,而不考虑计算机的具体存储结构和运算的具体实现算法。

基本描述格式如下: 

ADT 抽象数据类型名
{数据对象:数据对象的声明数据关系:数据关系的声明基本运算:基本运算的声明
}基本运算声明格式:基本运算名(参数表):运算功能描述参数:1、值参数:仅用于提供输入值2、引用参数:以&开头,除可以提供输入值以外,还将返回运算结果;

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

获取英文期刊的封面及目录

通过期刊编辑部获取。直接给编辑部的 Journal Manager 发邮件&#xff0c;索取封面和目录。 以 Elsevier 旗下期刊为例&#xff1a;使用“通讯作者”邮箱发邮件到support_chineseelsevier.com - 主题&#xff1a;通讯作者需要自己已发表论文当期期刊的纸本样式封面和目录页 PDF…

写论文检索文献总结

毕业季写论文如何快速找资料呢 国外文献检索网站 1.IEEE(电气与电子工程师协会),&#xff0c;IEEE在电气及电子工程、计算机、通信等领域发表的技术文献数量占全球同类文献的30% https://ieeexplore.ieee.org/Xplore/home.jsp 2.Elsevier世界上公认的高品位学术期刊 https:/…

看“数字鸿沟”变“数字红利” 2021交答卷

文章目录 前言一&#xff0c;【关键词】健康码1&#xff0c;他人代查、离线码……2&#xff0c;多种方式助老人获取健康码 二&#xff0c;【关键词】人工窗口1&#xff0c;完善传统服务“兜底”2&#xff0c;医院、银行保留人工窗口 三&#xff0c;【关键词】打车1&#xff0c;…

广东首例!涉“人脸识别”公民个人信息保护民事公益诉讼案宣判

认证数据保护官CDPO培训课程第3期 报名通道 时间&#xff1a;2022年7月30日、31日&#xff08;周六、周日&#xff09;形式&#xff1a;线上培训及线上考试联系&#xff1a;微信&#xff08;徐博士&#xff09;&#xff1a;heguilvshi&#xff0c;手机&#xff08;朱老师&…

2022-08-10-w03d03-w03d04-w03d05

这里写目录标题 一、健康报告小程序接口![在这里插入图片描述](https://img-blog.csdnimg.cn/01ebd393eafb4162a1467b8ab4c38b8b.png)二、健康报告模糊查询三、提测四、字符串 转 LocalDate五、公众号报错 一、健康报告小程序接口 服务套餐表加数据&#xff08;周月季年&#…

任正非对话美国科技思想家:我们很坚强,死不了

文 | 静静 出品 | 网易科技《态℃》栏目组 时隔26天&#xff0c;华为创始人任正非再次出现在公众视野当中。任正非与当今世界三大思想家中的两位&#xff08;尼古拉斯尼葛洛庞帝、乔治吉尔德&#xff09;一起喝了下午茶&#xff0c;要用一杯咖啡&#xff0c;吸收宇宙能量。 在这…

葫芦娃查询解析

贵旅优品 分享源代码 #def gen_sig(v,secret_key""): dict_sort_res dict(sorted(v.items(),keylambda x:x[0])) ss "" for key,value in dict_sort_res.items(): if key not in ["signcode"]: ss f"{key}{value}" r secret_key…

2023 哔哩哔哩查询用户账号信息api接口源码 无加密

哔哩哔哩查询个人账号信息api接口源码&#xff0c;使用id获取用户信息&#xff0c;包括用户名&#xff0c;性别&#xff0c;头像&#xff0c;等级&#xff0c;粉丝和关注数&#xff0c;个人介绍等还挺详细的&#xff0c;源码是调用的官方接口无加密。cookie需要替换自己的 调用…

上海推随“机短信密码” 禁止代查通话详单

看过电影《手机》的人或许都记得这样的情节&#xff0c;李燕和沈雪在移动营业厅凭自己的身份证就把费默和严守一的话费详单打印了出来。这一故事情节使得担心隐私外泄成为很多人的心病。 然而&#xff0c;据《新闻晨报》消息&#xff0c;第&#xff13;道认证关口“随机短信密码…

蓝桥杯嵌入式第六届省赛真题(代查)

本人提供代查服务&#xff0c;检测题目是否按要求编写功能以及修改代码纠正错误。 目录 一、题目 二、程序代码 1. RTC实时时钟 2. ADC测量功能 3. 串行功能 4. LCD显示 5. 按键功能 总结 一、题目 二、程序代码 1. RTC实时时钟 合并写入到 LCD显示 内。 2. ADC测量…

蓝桥杯嵌入式第十四届模拟题(代查)

有偿代查代码 目录 一、题目 二、程序代码 1. 显示功能 2. 按键功能 3. 串口功能 4. LED指示灯功 一、题目 二、程序代码 1. 显示功能 void LCD_Proc(void) {F180000000/((PRESCALER11)*(AUTORELOAD11));F780000000/((PRESCALER71)*(AUTORELOAD71));D1_LCD(COMPARE11)*…

蓝桥杯嵌入式第七届省赛(代查)

一、题目 二、程序代码 1. AD采集及滤波 void Set_Collect_Proc(void) {uint8_t a;float ADC;if((uwTick-uwTick_Collect)<1000) return;uwTick_CollectuwTick;for(a0;a<9;a){ADCGet_R37();}ADCADC*3.3f/4096;R37_ADCADC/10;HR37_ADC*K;if(H<E2PROM_Num[0]){Level0;…

叫停GPT-4后续AI大模型!马斯克、Bengio等人发出公开信,千人响应

来源&#xff1a;机器之心 呼吁所有 AI 实验室立即暂停训练比 GPT-4 更强大的 AI 系统&#xff0c;为期至少 6 个月。 人们一直在说 ChatGPT 有风险&#xff0c;OpenAI CEO 也这么说&#xff0c;现在终于有人出手了。 在 GPT-4 诞生两周之际&#xff0c;一封公开信正在社交媒体…

马斯克与全球千名科技人士联名叫停AI开发,转头却购入1万块GPU?

这几个月全球最焦点的话题莫过于横空出世的ChatGPT&#xff0c;然而这两天&#xff0c;全球最火爆的话题却突然转向&#xff01; 埃隆.马斯克等一众科技大咖敦促暂停人工智能开发&#xff01; Twitter 首席执行官埃隆马斯克 (Elon Musk)及苹果联合创始人史蒂夫.沃兹尼亚克和 D…

kaptcha实现验证码功能

最近看到一个使用kaptcha实现验证码的案例&#xff0c;因此记录一下 1.创建一个Springboot项目&#xff0c;在pom.xml里面导入如下依赖 <dependency><groupId>com.github.penggle</groupId><artifactId>kaptcha</artifactId><version>2.3.…

抖音店群玩法之后端维护

大家好&#xff0c;我是北鱼会大鹏&#xff0c;来自河南郑州&#xff0c;5年电商老兵&#xff0c;这是我第110篇原创文章。 抖音店群无货源玩法&#xff0c;是经过10年前的某宝无货源演变而来&#xff0c;任何项目开始初期既是红利期&#xff0c;许多店群老手因为自身有丰富的经…

抖音账号|短视频矩阵分发系统 | 多账号管理发布 |MVC架构

短视频矩阵分发系统是一种可以帮助企业、机构和个人高效分发短视频的工具。随着社交媒体的不断普及&#xff0c;短视频的使用越来越广泛&#xff0c;因此如何快速而准确地将短视频传播到不同的平台和账号上已经成为了一个重要的问题。短视频矩阵分发系统应运而生&#xff0c;它…

创弘星鹏电商:设计抖音小店主图的方法和技巧

主图是我们看到商品的一点眼&#xff0c;对商品的点击影响是很大的&#xff0c;有经验的商家都知道&#xff0c;点击不好首先就会去看看是不是主图的原因&#xff0c;尤其是上传的第一张主图尤为重要&#xff0c;小编给大家分享抖音小店制作主图的一些基本要求以及涉及方法. 抖…

从零开始搭建仿抖音短视频APP-后端开发消息业务模块(1)

项目持续更新中&#xff1a; 仿抖音短视频APP专栏 目录 保存系统消息到MongoDB 系统消息入库保存-关注 系统消息入库保存-点赞短视频 系统消息入库保存-评论与回复 保存系统消息到MongoDB 我们把mongoDB整合到Springboot之后&#xff0c;我们需要把映射层面做好。 首先在…

抖音矩阵号运营是什么?如何开发及布局

1.什么是抖音矩阵号运营&#xff1f;如何通过抖音SEO实现关键词侵占及排名优化&#xff1f;企业如何通过抖音SEO运营收货百亿流量&#xff1f; 抖音搜索你可以把它理解成更细分、更垂直的短视频搜索引擎。就像豆丁网一样&#xff0c;它就是垂直定位于中文文档的搜索引擎&#x…