课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们开发一些app软件和服务器的时候同时也会根据需要来设计相关的数据结构,下面我们就一起来了解一下,在进行数据结构开发的时候,都有哪些技术知识点是需要我们重点关注的,下面我们就开始今天的主要内容吧。
1. 概述
数据结构定义:
我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器(内存)中,以及在此基础上为实现某个功能(如元素的CURD、排序等)而执行的相应操作,这个相应的操作也叫算法。
数据结构 = 元素 + 元素的关系
算法 = 对数据结构的操作
算法:
算法就是:解决问题的方法和步骤
衡量算法有如下标准:
时间复杂度
程序要执行的次数,并非执行时间
空间复杂度
算法执行过程中大概要占用的最大内存
难易程度(可读性)
健壮性
2. 数据结构的特点和地位
地位:
数据结构处于软件中核心的地位。
如计算机内存中栈和堆的区别,不懂数据结构的人可能会认为内存就是分两大部分,一块叫栈,一块叫堆,显然这是非常肤浅且不正确的结论。
实际上如果一块内存是以压栈出栈的方式分配的内存,那么这块内存就叫栈内存,如果是以堆排序的方式分配的内存,那么这块内存就叫堆内存,其最根本的区别还是其内存分配算法的不同。
例如,函数的调用方式也是通过压栈出栈的方式来调用的,或者操作系统中多线程操作有队列的概念,队列用于保证多线程的操作顺序,这也是数据结构里面的内容、或者计算机编译原理里面有语法树的概念,这实际上就是数据结构里面的树,比如软件工程、数据库之类都有数据结构的影子。
特点:
数据结构修炼的是内功,并不能直接立竿见影的可以解决现实问题,但是有了这门内功会在其他方面的学习中对你大有益处。
3. 预备知识(C语言)
学习数据结构应该具备如下知识:
指针
结构体
动态内存的分配和释放
跨函数使用内存
本小节主要介绍学习数据结构应该有的基础,并对相关知识稍作讲解。
指针
指针是 C语言 的灵魂,重要性不需多言。
指针定义
地址:
地址是内存单元的编号
其编号是从 0 开始的非负整数
范围: 0 -- 0xFFFFFFFF (232 - 1) 注:此指x86平台,x64平台下最大内存地址为 (264 - 1)
指针:
指针就是地址,地址就是指针。
指针变量是存放内存单元地址的变量,它内部保存的值是对应的地址,地址就是内存单元的编号(如内存地址值:0xffc0)。
指针的本质是一个操作受限的非负整数
在计算机系统中,CPU 可以直接操作内存,关于 CPU 对内存的操作与控制原理可以简单理解如下:
地址线 : 确定操作哪个地址单元
控制线 : 控制该数据单元的读写属性
数据线 : 传输 CPU 和内存之间的数据
结构体
为什么会出现结构体、
为了表示一些复杂的数据,而普通的基本数据无法满足要求.
什么叫结构体
结构体是用户根据实际需要,自己定义的复合数据类型
如何使用结构体
总结起来有两种结构体的使用方式:直接使用 && 通过指针使用
struct Student ss = {12,"xiaoyou",1.73,"xiaozhang"};
struct Student *pst = &ss;
ss.name ; 这里直接操作结构体本身
pst -> name ; 这里通过指针地址操作,更加节省空间
注意事项
结构体变量的类型为: struct Student
结构体变量不能加减乘除,但是能够相互赋值
普通结构体变量和结构体指针变量作为函数传参的问题
动态内存分配和释放
平时直接创建数组的写法都是静态创建,创建完毕之后在整个程序的运行过程中,会固定占用对应的内存,不仅会造成内存空间浪费,还无法动态添加元素,所以局限性很大,而程序中我们为了避免这种情况,应该使用动态的方式创建和销毁数组。
跨函数使用内存
在函数内部分配的局部变量,在函数调用完成之后就会被系统回收,其内存也会消失。但是程序中常常需要定义一块内存,当我们用完之后再会回收。如 OC 语言中对象。所以需要保存住分配的内存,应该用动态分配内存,当用完之后再手动释放。这也是C语言的一个不足之处:内存需要我们手动创建和手动释放,这也是 OC 语言在开发 iOS 程序时候,我们所讲的MRC。
作者:xiaoyouPrince
来源:博客园
【免责声明】:本内容转载于网络,转载目的在于传递最新信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。