(1).数据结构概述

目录

数据结构概述

预备知识:

模块:


这篇笔记是根据郝斌老师的上课讲义整理而得:

数据结构概述

定义:如何把现实中大量复杂的问题以特定的数据类型和特定的存储结构保存到主存储器中(内存)中, 以及在此基础上为实现某一个功能而执行的相应操作,这个相应的操作也叫算法。

特定的数据类型和结构是指:如果我们保存少量的数据,我们可以使用数组(连续);如果保存大量的数据,我们就必须使用链表(不连续,通过指针相连);如果我们还要保存数据item之间的关系,如一个部门的上下级关系,我们就必须使用树来保存;如果我们要保存一个城市的地图(任何节点之间都可能产生关系),那我们必须使用图来保存。

数据结构 = 个体的存储+个体的关系存储

 算法 = 对存储数据的操作

算法:
    解题的方法和步骤
    衡量算法的标准
        1. 时间复杂度:大概程序要执行的次数,而非执行的时间
        2. 空间复杂度:算法执行过程中大概所占用的最大内存
        3. 难易程度
        4. 健壮性

数据结构的地位:
    数据结构是软件中最核心的课程
    程序 = 数据的存储 + 数据的操作 + 可以被计算机执行的语言

 

预备知识:

1)指针:

指针是C语言的灵魂 ;

表示一些复杂的数据结构 ;快速的传送数据;使函数返回一个以上的值;能直接访问硬件 ;能够方便的使用数组和字符串;是理解面向对象语言中引用的基础

定义:地址,内存单元的编号。指针变量占4个字节。指针就是地址 地址就是指针;指针变量是存放内存单元地址的变量;指针的本质是一个操作受限的非负整数

分类:
        1. 基本类型的指针
            int *i;

如何通过被调函数修改主调函数中普通变量的值
Ⅰ 实参为相关变量的地址
Ⅱ 形参为以该变量的类型为类型的指针变量Ⅲ在被调函数中通过  *形参变量名 的方式就可以修改主函数相关变量的值void f(int * p) //不是定义了一个名字叫做*p的形参, 而是定义了一个形参,该形参名字叫做p,它的类型是int *
{*p = 100; //
}int main(void)
{int i = 9;f(&i);printf("i = %d\n", i);return 0;
}


        2. 指针和数组的关系

指针 和 一维数组
数组名

一维数组名是个指针常量,它存放的是一维数组第一个元素的地址, 它的值不能被改变一维数组名指向的是数组的第一个元素

        

int a[5] = {1,2,3,4,5};
printf("%p\n", *a+1);//平移四个字节地址double arr[3];
double *q;
q = &arr[0];
q = &arr[1];    //平移8个字节地址,但指针变量只占4个字节
void Show_Array(int * p, int len)
{int i = 0;for (i=0; i<len; ++i)printf("%d\n", p[i]);//p[2] = -1;  //p[0] == *p   p[2] == *(p+2) == *(a+2) == a[2]//p[i]就是主函数的a[i]
}int main(void)
{int a[5] = {1,2,3,4,5};Show_Array(a, 5);  //a等价于&a[0], &a[0]本身就是int *类型//printf("%d\n", a[2]);return 0;
}

  指针的指针

结构体:
    为什么会出现结构体
        为了表示一些复杂的数据,普通的数据类型无法满足要求
        
    什么叫结构体
        结构体是用户根据实际需要自己定义的复合数据类型
        
    如何使用结构体
     

#include <string.h>struct Student
{	int sid;char name[200];int age;
}; //分号不能省int main()
{strcpy(st.name, "lisi");struct Student * pst = &st;pst->sid ==(*pst).sid == st.sid;    //pst所指向的结构体变量中sid成员}


        
    注意事项
        结构体变量不能加减乘除,但可以相互赋值
        普通结构体变量和结构体指针变量作为函数参数的问题

传输的时候最好传输指针:地址,而不要传输变量,因为变量可能需要传输很多字节,而指针始终传输的是四个字节。
    
动态内存的分配和释放

int * pArr = (int *)malloc(sizeof(int) * len);//等价于 int pArr[len]
*pArr = 4;//等价于a[0] = 4
pArr[1] = 10;//等价于a[1] = 10free(pArr);1、 malloc只有一个int型的形参,表示要求系统分配的字节数
2、 malloc函数的功能是请求系统len个字节的内存空间,如果请求分配成功,则返回第一个字节的地址,如果分配不成功,则返回NULL
3、 malloc函数能且只能返回第一个字节的地址,所以我们需要把这个无任何实际意义的第一个字节的地址(俗称干地址)转化为一个有实际意义的地址,因此malloc前面必须加(数据类型 *),表示把这个无实际意义的第一个字节的地址转化为相应类型的地址。如:
int *p = (int *)malloc(50); 表示将系统分配好的50个字节的第一个字节的地址转化为int *型的地址,更准确的说是把第一个字节的地址转化为四个字节的地址,这样p就指向了第一个的四个字节,p+1就指向了第2个的四个字节,p+i就指向了第i+1个的4个字节。p[0]就是第一个元素, p[i]就是第i+1个元素double *p = (double *)malloc(80); 
表示将系统分配好的80个字节的第一个字节的地址转化为double *型的地址,更准确的说是把第一个字节的地址转化为8个字节的地址,这样p就指向了第一个的8个字节,p+1就指向了第2个的8个字节,p+i就指向了第i+1个的8个字节。p[0]就是第一个元素, p[i]就是第i+1个元素
free(p)
释放p所指向的内存,而不是释放p本身所占用的内存

 

模块:

模块一:线性结构

连续存储[数组]

离散存储[链表]

线性结构的两种常见应用之一 栈

线性结构的两种常见应用之二 队列

专题:递归

  1. 1+2+3+...+100
  2. 求阶乘
  3. 汉诺塔
  4. 走迷宫

模块二: 非线性结构

模块三: 查找和排序

折半查找

排序:

  1. 冒泡
  2. 快速排序
  3. 插入排序
  4. 选择排序
  5. 归并排序

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

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

相关文章

ROS导航之参数配置和自适应蒙特卡罗定位

我们的机器人使用两种导航算法在地图中移动&#xff1a;全局导航&#xff08;global&#xff09;和局部导航&#xff08;local)。这些导航算法通过代价地图来处理地图中的各种信息&#xff0c;导航stack使用两种costmaps http://www.cnblogs.com/zjiaxing/p/5543386.html存储环…

吴恩达机器学习作业(2):多元线性回归

目录 1&#xff09;数据处理 2&#xff09;代价函数 3&#xff09;Scikit-learn训练数据集 4&#xff09;正规方程 练习1还包括一个房屋价格数据集&#xff0c;其中有2个变量&#xff08;房子的大小&#xff0c;卧室的数量&#xff09;和目标&#xff08;房子的价格&#…

【洛谷 - P2756】飞行员配对方案问题(网络流最大流,输出方案)

题干&#xff1a; 题目背景 第二次世界大战时期.. 题目描述 英国皇家空军从沦陷国征募了大量外籍飞行员。由皇家空军派出的每一架飞机都需要配备在航行技能和语言上能互相配合的2 名飞行员&#xff0c;其中1 名是英国飞行员&#xff0c;另1名是外籍飞行员。在众多的飞行员中…

office 安装错误 1920 osppsvc服务无法启动 failed to start

今天忽然发现Office 报 1920 错误&#xff0c;按照网上的的各类教程&#xff0c;还是不行&#xff0c;没有办法启动。答搞了一下午了&#xff0c;终于Ok&#xff0c;超级简单&#xff1a; 首先&#xff0c;到文件夹 C:\Program Files\Common Files\microsoft shared\OfficeSo…

机器学习笔记(八):神经网络:学习

目录 1&#xff09;Cost function 2&#xff09;Backpropagation algorithm 3&#xff09;Backpropagation intuition 4) Gradient checking 5&#xff09;Random initialization 6&#xff09;Putting it together 注&#xff1a;吴恩达老师的机器学习课程对反向传播算…

【HDU - 6231】K-th Number(二分,思维)

题干&#xff1a; Alice are given an array A[1..N]A[1..N] with NN numbers. Now Alice want to build an array BB by a parameter KK as following rules: Initially, the array B is empty. Consider each interval in array A. If the length of this interval is les…

C 语言运算符优先级(记忆口诀)

优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 () 圆括号 &#xff08;表达式&#xff09;/函数名(形参表) . 成员选择&#xff08;对象&#xff09; 对象.成员名 -> 成员选择&#xff08;指针&#xff0…

吴恩达机器学习作业(3):逻辑回归

目录 1&#xff09;数据处理 2&#xff09;sigmoid函数 3&#xff09;代价函数 4&#xff09;梯度下降 5&#xff09;预测函数 我们首先做一个练习&#xff0c;问题是这样的&#xff1a;设想你是大学相关部分的管理者&#xff0c;想通过申请学生两次测试的评分&#xff0c…

机器学习笔记(九):应用机器学习的建议

目录 1&#xff09;Deciding what to try next 2&#xff09;Evaluating a hypothesis 3&#xff09;Model selection and training/validation/test sets 4&#xff09;Diagnosing bias vs. variance 5&#xff09;Regularization and bias/variance 6&#xff09;Learn…

【洛谷 - P3410】拍照(最大权闭合图,网络流最小割)

题干&#xff1a; 题目描述 小B有n个下属&#xff0c;现小B要带着一些下属让别人拍照。 有m个人&#xff0c;每个人都愿意付给小B一定钱让n个人中的一些人进行合影。如果这一些人没带齐那么就不能拍照&#xff0c;小B也不会得到钱。 注意&#xff1a;带下属不是白带的&…

ROS有三个层级的概念,分别是:文件系统级、计算图级和开源社区级

ROS有三个层级的概念&#xff0c;分别是&#xff1a;文件系统级、计算图级和开源社区级。 文件系统级&#xff1a;ROS的内部结构、文件结构和所需的核心文件都在这一层里&#xff0c;理解ROS文件系统是入门ROS的基础。一个ROS程序的结构&#xff0c;是一些按不同功能进行区分的…

【洛谷 - P1231 】教辅的组成(网络流最大流,拆点)

题干&#xff1a; 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案&#xff0c;然而他却明明记得这书应该还包含一份练习题。然而出现在他眼前的书多得数不胜数&#xff0c;其中有书&#xff0c;有答案&#xff0c;有练习册。已知一个完整的书册均应该包含且仅包含一本书…

机器学习笔记(十):机器学习系统的设计

目录 1&#xff09;Prioritizing what to work on:Spam classification example 2&#xff09;Error analysis 3&#xff09;Error metrics for skewed classes 4&#xff09;Trading off precision and recall 5&#xff09;Data for machine learning 下面将学习到在构建…

ROS坐标系统,常见的坐标系和其含义

常见的坐标系 在使用ROS进行定位导航等操作时&#xff0c;我们经常会遇到各种坐标系。每种坐标系都有明确的含义。理论上坐标系的名称可以是随意的&#xff0c;但是为了方便不同的软件间共享坐标信息&#xff0c;ROS定义了几个常见的坐标系。 1.base_linkbase_link坐标系和机…

【洛谷 - P1345 [USACO5.4]】奶牛的电信(网络流最小割,拆点)

题干&#xff1a; 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系&#xff0c;于是她们建立了一个奶牛电脑网络&#xff0c;以便互相交流。这些机器用如下的方式发送电邮&#xff1a;如果存在一个由c台电脑组成的序列a1,a2,...,a(c)&#xff0c;且a1与a2相连&#xff0c;a2与…

机器学习笔记(十一):支持向量机

目录 1&#xff09;Optimization objective 2&#xff09;Large Margin Intuition 3&#xff09;Kernels 1 4&#xff09;Kernels II 5&#xff09;Using an SVM 注&#xff1a;这一章SVM可能有点难理解&#xff0c;强烈建议大家把本章的编程作业做了。 1&#xff09;Opt…

ros中的坐标系,

ros中的坐标系&#xff0c;主要包括&#xff1a; map&#xff0c;odom&#xff0c;base_link(base_footprint) 以及如laser&#xff0c;camera等传感器的坐标系&#xff1b; 这些坐标系间的关系可以用下图表示&#xff1a; 这是一个有向图&#xff0c;图中涉及四个坐标系&#…

【BZOJ - 3224】普通平衡树(Splay模板题)

题干&#xff1a; 您需要写一种数据结构&#xff08;可参考题目标题&#xff09;&#xff0c;来维护一些数&#xff0c;其中需要提供以下操作&#xff1a; 1. 插入x数 2. 删除x数(若有多个相同的数&#xff0c;因只删除一个) 3. 查询x数的排名(若有多个相同的数&#xff0c;因…

ROS中常见坐标系定义及基本单位

为了方便开发者代码复用&#xff0c;ROS中统一定义了常见的坐标系&#xff08;REP&#xff09;&#xff0c;所有的坐标系都是右手坐标系。 1. map --固定的世界坐标系&#xff0c;z轴垂直向上。在map中表示的移动平台的pose是没有drift&#xff0c;没有累计误差的。而且&…

【Gym - 101061F】Fairness(dp,思维)

题干&#xff1a; Dwik and his brother Samir both received scholarships from a famous university in India. Their father, Besher, wants to send some money with each of them. Besher has n coins, the ith coin has a value of ai. He will distribute these coins…