一、对数据结构这门课的基础认识
1.1 数据结构的定义:
我们怎样将现实中的各种数据以特定的数据类型和特定的存储结构保存到主存储器(内存)当中去。-------数据结构
在此存储基础上为实现某个功能(比如查找某个元素,删除某个元素,以及对所有元素进行排序)而执行的相应操作,这个相应的操作也叫做算法-----算法
因此说,数据结构与算法不分家,
数据结构指数据的存储
算法指的是对存储数据的操作(解题的方法和步骤,依附于存储结构)
数据的存储:数据结构研究现实中大量的问题数据保存到内存当中去,个体如何存储,个体与个体之间特定的关系如何存储
不同的算法要完成同一种存储的操作是完全不一样的:数组,链表,栈,队列
1.2 衡量算法的标准:主要的是1,2
1 .时间复杂度(程序大概需要执行的次数,估算,不是执行的时间)
如何计算时间复杂度:运行一次的时间*要执行的次数
另外算法时间复杂度也和机器有关
2 .空间复杂度:(算法执行过程中大概所占用的最大内存)
3 难易程度
4.健壮性
1.3 数据结构的特点和地位:
很重要很重要,是软件中最核心的课程,是基本功,是内功
学完之后实际的干不出来什么,但是他是内功,促进对其他课程的学习以及对于编程的理解
栈内存和堆内存:内存方式的算法不同
程序=数据的存储+数据的操作+计算机语言(数据结构+算法+编程语言)
二、预备知识:
最好的数据结构:伪代码用一定的语言来实现(有难度)
一定是需要指针的(数据结构的核心是链表),因此基于java的数据结构是胡扯
C语言中的指针是基础
2.1 内存概念:
(1)内存是用来存储数据的设备,存储速度介于寄存器和硬盘之间
(2)内存是CPU唯一可以访问的大容量存储设备,多有硬盘中的程序和数据的运营都需要先调入内存之后才能被CPU执行
(3)内存的分配是软件开发的核心问题
(4)内存是多字节组成的线性一位空间
(5)内存的基本划分单位:字节,每个字节有8位
(6)字节和编号一一对应,每个字节对应一个一个编号,这个编号也叫地址
(7)一个系统所能管理的内存空间取决于编号的二进制位数
2.2 预备知识指针(复习):
指针的重要性:C语言的灵魂
地址的定义:
内存单元的编号(从0开始的非负整数)
内存可以由cpu直接访问,CPU和内存之间有三根线:地址线(确定Cpu处理的内存对象),控制线(表示只读?只写?可读可写?),数据线(数据传输)
指针的定义:
指针就是地址,地址就是指针
指针的本质是一个操作受限的非负整数
指针变量:
存放内存单元地址(内存单元编号)的变量(也是变量)
指针变量如果没有及时初始化里面存放的是一个垃圾数字,指向不确定的单元。
指针变量的初始化:
(1)基本类型的指针
int* p:
p是指针变量的名字
int*表示只能存放整型变量的地址(表示指针变量的类型)
函数调用中:传值调用(不可修改),传值调用(可以修改)
(2) 指针和数组的关系:
一维数组名是个指针常量(记住就行),存放的是一维数组在首元素的地址(指向a[0])
arr[ i ]等价于( arr + i )*
指针运算:指针加减整数
指针变量的大小:是确定的,和指向的变量类型无关
2.3 结构体:
结构体的作用:
为了完整的表示复杂对象,普通的基本类型变量无法满足要求
结构体是什么:
自定义的一种数据类型,是数据类型而不是变量,是一种模型,{ }上面的表示的是数据类型的名称
使用结构体(结构体变量的访问):
(1)对结构体变量初始化后,通过‘ . ’结构体访问标识符的方式对结构体变量进行访问
(2)->的方式(更常用)
定义一个结构体类型的指针变量并将某个结构体变量的地址赋予这个指针
再使用->就可以对结构体变量中的成员变量进行访问
结构体的注意事项:
1 结构体变量不能相加减,但是可以相互赋值
2 结构体变量和结构体指针变量作为函数传参的问题
三、动态内存的分配和释放:
分配:请求使用内存
释放:使用完操作系统回收内存的使用权限
静态数组:没有使用malloc函数,通过下标访问的数组
动态数组:使用了malloc函数
优点:(1)更加灵活,可以在程序执行过程中对数组内存空间进行分配和释放
int* pArr = ( int* ) malloc ( sizeof ( int ) * len );
malloc库函数里面整体是一个形参,表示的是请求申请的字节总数,函数的返回值是第一个字节的地址(没有实际含义的地址,也叫干地址)。
( int* )是强制类型转换,指出应该指向的数据的地址类型
用第一个字节的表示第一个元素(前四个字节)的地址
pArr可以当作动态数组的数组名:pArr是动态数组首元素的地址
(2)在程序运行的过程中,需要对动态数组内存空间进行手动释放。
文章来源:https://www.toymoban.com/news/detail-424732.html
free(动态数组名);文章来源地址https://www.toymoban.com/news/detail-424732.html
到了这里,关于【数据结构 ---基于C语言预备知识】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!