数据结构--1

===day1
【1】 数据结构
数据结构: 其实就是数据对应的逻辑结构、存储结构、操作;

数据结构指的是数据元素及数据元素之间的相互关系,或组织数据的形式。

数组 a[]在内存中是连续的; 
未解决数据存在的弊端,搞出来了链式存储;

	数据结构,划分成3个方面:  逻辑结构、存储结构、运算(操作);
		a. 逻辑结构:   
				=>	线性结构:  是一对一的关系;  
							特性:首元素,没有前驱,但有唯一的后继;
								  中间元素,唯一的前驱和唯一的后继;
								  尾元素,唯一的前驱,但没有后继	
					   (线性表)
				=>	非线性结构: 是一对多或多对多;
							树、图	
		b.  存储结构: 
					存储结构其实就是逻辑结构的具体实现; 
							=> 一种顺序存储(数组),
							=> 另外一种是不连续(链表),链式存储;  
							=> 索引存储方法、     
							=> 散列(哈希HASH)存储方法。

		c. 数据的运算:检索、排序、插入、删除、修改等 			

【2】
数据(Data):
数据即信息的载体,是能够输入到计算机中并且能被计算机识别、存储和处理的符号总称。
数据元素(Data Element):
数据元素是数据的基本单位,又称之为记录(Record)。
一般,数据元素由若干基本项(或称字段、域、属性)组成。
数据类型(Data Type):
数据类型是对数据元素取值范围与运算的限定。

【3】算法(算法工程师)

PID
卡尔曼滤波
...

对于普通工程师来说需要做的是算法的移植;
					
陀螺仪 (MPU6050 ,MMA8451..):					
	三轴加速度(x,y,z)

概念:
算法(Algorithm)是一个有穷规则(或语句、指令)的有序集合。

算法的特性:
(1)    有穷性 —— 算法执行的步骤(或规则)是有限的;
(2)    确定性 —— 每个计算步骤无二义性; if else
(3)    可行性 —— 每个计算步骤能够在有限的时间内完成;
(4)    输入 —— 算法有零个或多个外部输入;(输入规模)
(5)    输出 —— 算法有一个或多个输出。

算法好坏的方法:
1. 时间复杂度
不是考量算法执行了多长时间,而是看算法中间执行的次数;

		for(i = 0;i < n ;i++)                // n
		{
			for(j = 0; j < n;j++)            //(n-1)* n 
			{
				printf("hello world.\n");    // n*n
			}
		}
		
		n + (n-1)*n + n*n = 2n^2
		
		时间复杂度 n^2 
		
		3n^2 + 4n^3 + 2n + 5 ?
		时间复杂度为 n^3
		
2. 空间复杂度
	
3. 算法的健壮性
	要求算法是比较稳定的;
4. 容易理解、容易编程和调试、容易维护。	

【4】
数据结构 + 算法 = 程序

【5】
线性结构:
线性表 : 顺序存储、链式存储

  1. 线性表的顺序存储:
    顺序存储的劣势:
    a. 存储数据个数是有限的;
    b. 增加数据或删除数据的时候,要大浮度的移动数据;
    顺序存储的优势:
    根据数据下标能快速的访问到对应的元素;

     	顺序存储在内存中是连续的;(数组)
    

顺序表代码实现:
1. 构建模型(struct list)
struct list{
int data[N];
int last;
};
2. 创建一个空的顺序表;
(struct list *)malloc(sizeof(struct list))
last = -1;
3. 插入数据(尾插法)
插入数据前判断表是否已满
如果不满则可以插入;
找到最后一个元素下标;
将下标+1(last+1);
data[last] = x;
4. 判断表是否已满
last >= N - 1 为满

	5. 遍历
	6. 按位置来插入数据
		seqlist_insert_pos(L,pos,value);
	
	7. 删除数据
		a. 按位置删
		b. 按值删
			先假设这个表里面数据没有重复的元素
		c. 尾删
		d. 头删
	8. 查找
		a. 按位置查找;
		b. 按值查找;
	
	9. 修改数据
		a. 按位置修改 
		b. 根据值(old)来修改新(new)的值
	
	
	作业:
		1. 删除表中重复数据,只保留一个;
		2. 合并两个表的数据; 
			先将L1表,置成有序表(从小到大)
			L1 , L2,
			将L2表中数据,按数据大小插入;
		L1  4 5 8 9 9 6 8 7 4 7 
		L2  3 1 2 0
		=>  0 1 2 3 4 5 6 7 8 9
		
		3. 制作一个菜单选项:
		
		===============================================	
		1. insert  2. find   3. del  4. updata  5. 退出 
		===============================================
		strcmp(  quit);
		
		4. 预习链式存储 

=================================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值