数据结构概述

数据结构概述
定义:
我们如何把现实中大量而复杂的问题以特定的数据类型和特定的存储结构保存到主存储器中(内存),


保存一个班级的成绩(数组)     要是10000个人 还可以数组但是
很困难,数组是连续存放的。10000个连续的空间,数据存储关键。
数据量很大,没有连续的那么多空间。。。(链表)(树)的形式
做人事管理系统

以及在此基础上为实现某
 个功能。(比如查找某个元素,删除某个元素,对所有元素进行排
 序)而执行的相应操作,这个相应的操作也叫算法。
 
数据结构 = 个体的存储 +  个体与个体关系的存储
算法  =  对存储数据的操作


算法
解体的方法和步骤
衡量算法的标准
    1、时间复杂度
        大概程序要执行的次数,而非执行的时间
运行次数最多的那一段程序的次数
        甲算法:10   乙算法  5   时间不合适,机器什么不一样
    2、空间复杂度
算法执行过程中大概所占用的最大内存
3、难易程度  //可读性
4、健壮性
数据结构的地位(操作系统)(编译原理)
数据结构是软件中最核心的课程。很重要,难度大。
(发现学完什么也做不了)
无论是C  C+=  Java  内存中有栈和堆,函数调用
操作系统 先后顺序队列
    程序 = 数据的存储 + 数据的操作 + 可以被计算机执行的语言


预备知识   
指针  结构体   动态内存的分配和释放

基本C语言指针: 基本类型指针   指针与一维数组


指针
        指针的重要性:
       指针是C语言的灵魂
   定义
            地址:内存单元的编号(从0开始的非负整数)
(cpu可直接访问内存)  地址线(内存地址)  数据线  控制线(读写)
范围:0-----FFFFFFFF(0---4G-1)
指针:
指针就是地址  地址就是指针
指针变量是存放内存单元地址的变量
指针的本质是一个操作受限的非负整数
分类:
1、基本类型的指针

2、指针和数组的关系
结构体
为什么会出现结构体
属性 和 方法 为了表示一些复杂的数据,而普通的基本类型变量无法满足要求。
什么叫结构体
   结构体是用户根据实际需要自己定义的复合数据类型。
如何使用结构体
两种方式:
struct Student st = {1000,"zhangsan",20};
struct Student *pst; //结构体指针
1、st.sid = 99; //第一种方式
2、pst -> sid 
  pst所指向的结构体变量中的sid这个成员
注意事项
结构体变量不能加减乘除,但可以相互赋值。
普通结构体变量和结构体指针变量作为函数传参的问题。

动态内存分配 (所有高级语言,没有C里深刻)
传统数组的缺点:
1.数组长度必须事先指定,而且只能是常整数,不能是变量
例子 int a[5]; //必须事先指定,而且只能是常整数
  int len = 5; int a[len];//error
2.传统形式定义的数组,该数组的内存程序员无法手动释放
数组一旦定义,系统为数组分配的内存空间就会一直存在,除非数组所在的函数运行终止。
在一个函数运行期间,系统为该函数中的数组分配的空间会一直存在。
直到该函数运行完毕时,数组的空间才会被系统自动释放。
例子:void f(void){int a[5]={1,2,3,4,5};....}
//数组a 占20个字节的内存空间,程序员无法手动编程释放它,数组a只能在f()函数结束被系统释放
3. 数组的长度一旦定义,数组长度就不能再更改。
数组的长度不能在函数运行的过程中动态的扩充或缩小
4. 传统方式定义的数组不能跨函数使用
A函数定义的数组,只有在A函数运行期间才可以被其他函数使用,
但A函数运行完毕后,A函数中的数组将无法在被其他函数使用。


为什么需要动态分配内存
很好的解决的了传统数组的4个缺陷

动态内存分配举例_动态数组的构造 难点






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值