【数据结构 ---基于C语言预备知识】

这篇具有很好参考价值的文章主要介绍了【数据结构 ---基于C语言预备知识】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、对数据结构这门课的基础认识

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处理的内存对象),控制线(表示只读?只写?可读可写?),数据线(数据传输)

指针的定义:

指针就是地址,地址就是指针

指针的本质是一个操作受限的非负整数

指针变量:

存放内存单元地址(内存单元编号)的变量(也是变量)

指针变量如果没有及时初始化里面存放的是一个垃圾数字,指向不确定的单元。

指针变量的初始化:
【数据结构 ---基于C语言预备知识】

(1)基本类型的指针

int* p:

p是指针变量的名字

int*表示只能存放整型变量的地址(表示指针变量的类型)
【数据结构 ---基于C语言预备知识】

函数调用中:传值调用(不可修改),传值调用(可以修改)

(2) 指针和数组的关系:

【数据结构 ---基于C语言预备知识】

一维数组名是个指针常量(记住就行),存放的是一维数组在首元素的地址(指向a[0])

arr[ i ]等价于( arr + i )*

指针运算:指针加减整数

指针变量的大小:是确定的,和指向的变量类型无关

【数据结构 ---基于C语言预备知识】

2.3 结构体:

结构体的作用:

为了完整的表示复杂对象,普通的基本类型变量无法满足要求

结构体是什么:

自定义的一种数据类型,是数据类型而不是变量,是一种模型,{ }上面的表示的是数据类型的名称

使用结构体(结构体变量的访问):

(1)对结构体变量初始化后,通过‘ . ’结构体访问标识符的方式对结构体变量进行访问

(2)->的方式(更常用)

定义一个结构体类型的指针变量并将某个结构体变量的地址赋予这个指针

再使用->就可以对结构体变量中的成员变量进行访问

结构体的注意事项:

1 结构体变量不能相加减,但是可以相互赋值

2 结构体变量和结构体指针变量作为函数传参的问题

三、动态内存的分配和释放:

分配:请求使用内存

释放:使用完操作系统回收内存的使用权限

静态数组:没有使用malloc函数,通过下标访问的数组

动态数组:使用了malloc函数

【数据结构 ---基于C语言预备知识】

优点:(1)更加灵活,可以在程序执行过程中对数组内存空间进行分配和释放

int* pArr = ( int* ) malloc ( sizeof ( int ) * len );

malloc库函数里面整体是一个形参,表示的是请求申请的字节总数,函数的返回值是第一个字节的地址(没有实际含义的地址,也叫干地址)。

( int* )是强制类型转换,指出应该指向的数据的地址类型

用第一个字节的表示第一个元素(前四个字节)的地址

pArr可以当作动态数组的数组名:pArr是动态数组首元素的地址

(2)在程序运行的过程中,需要对动态数组内存空间进行手动释放。

【数据结构 ---基于C语言预备知识】

free(动态数组名);文章来源地址https://www.toymoban.com/news/detail-424732.html

到了这里,关于【数据结构 ---基于C语言预备知识】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 『初阶数据结构 • C语言』⑨ - 基于结点的数据结构——链表(单链表&&双向循环链表)附完整源码

      本章内容 1.什么是链表 2.链表常见几种形式 3.无头单向非循环链表的实现 3.1结点结构的定义 3.2函数接口的实现 3.2.1尾插 3.2.2尾删 4. 带头双向循环链表的实现 4.1结点结构的定义 4.2函数接口的实现 5.两种链表的差异 ①尾插与尾删的时间复杂度 ②头插与头删的时间复杂度 ③

    2024年02月16日
    浏览(80)
  • [数据结构 -- C语言] 堆实现Top-K问题,原来王者荣耀的排名是这样实现的,又涨知识了

    目录 1、什么是Top-K问题? 1.1 Top-K基本思路 2、Top-K问题逻辑分析 2.1 建堆,大小为K的小堆 2.2 将剩余的N - K 个元素依次与堆顶元素比较,大于就替换 2.3 打印堆 3、TopK实现代码 4、Top-K问题完整代码 结果展示: TopK问题的引入: 大家在玩王者荣耀的时候都遇到过xxx市第xxx某英雄

    2024年02月09日
    浏览(60)
  • 贪吃蛇项目(基于C语言和数据结构中的链表)

    首先先建立3个文件。 Snake.h 函数的声明 Snake.c 函数的定义 Test.c     贪吃蛇的测试    我们分析这整个项目 首先在我们实现游戏开始的部分之前,我们要先创建贪吃蛇的节点,再由此创建整个贪吃蛇所包含的一些信息: 我们枚举一下这个贪吃蛇中所有的一些状态: 然后我们

    2024年02月20日
    浏览(55)
  • 顺序表和链表【数据结构】【基于C语言实现】【一站式速通】

    目录 顺序表 顺序表的优点 顺序表的实现 1.结构体的定义 2.初始化数组  3.插入数据 4.其余接口函数的实现 5.释放内存 顺序表的缺陷 单向链表 单向链表的优点 单向链表的实现 1.链表的定义  2.链表的初始化 3.其余接口函数的实现 5.释放内存 单向链表的缺陷 双向链表 双向链

    2024年01月24日
    浏览(52)
  • 基于自然语言处理的结构化数据库问答机器人系统

      完整代码下载:https://download.csdn.net/download/andrew_extra/88614388         知识库,就是人们总结出的一些历史知识的集合,存储、索引以后,可以被方便的检索出来供后人查询/学习。QnA Maker是用于建立知识库的工具,使用 QnA Maker,可以根据 FAQ(常见问题解答)文档或者 U

    2024年02月04日
    浏览(53)
  • 基于C语言的数据结构之顺序表——带你熟练掌握顺序表基本操作!!超级详细!!

    目录 前言: 1.源代码如下 2.数据结构——顺序表    2.1.顺序表的特点    2.2顺序表的分类     2.2.1.动态分配内存的顺序表     2.2.2.静态分配内存的顺序表    2.3.定义一个顺序表 3.顺序表的基本操作    3.1初始化顺序表     不用将顺序表中可能存在的原有元素初始化吗?

    2024年04月26日
    浏览(40)
  • 基于C语言的数据结构课程设计(学生管理系统、停车场管理、家谱管理、校园导航系统)

    一、设计目的 本课程设计是软件工程学生的必修课程,数据结构与算法课程设计既是一门基础课程,又是一门实践性课程。 通过本实训课程的学习和训练,使同学学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的运

    2024年02月09日
    浏览(58)
  • 数据结构_链表_双向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)

    版本: 2024年4月26日 V1.0 发布于博客园 目录 目录 双向循环链表公式 初始化双向循环链表 构建双向循环链表结点 创建一个空链表(仅头结点) 创建一个新结点 插入数据 头插 中插 尾插 删除数据 头删 中删 尾删 查询打印数据 遍历打印 测试 测试结果: 完整代码 DoubleCirLList.h

    2024年04月27日
    浏览(51)
  • 数据结构_链表_单向循环链表的初始化、插入、删除、修改、查询打印(基于C语言实现)

    版本: 2024年4月25日 V1.0 发布于博客园 目录 目录 单向循环链表公式 初始化单向循环链表 构建单向循环链表结点 创建一个空链表(仅头结点) 创建一个新结点 插入数据 头插 中插 尾插 删除数据 头删 中删 尾删 查询打印数据 遍历打印 测试 测试结果: 完整代码 CircularLinkedLis

    2024年04月25日
    浏览(50)
  • 动手学深度学习-预备知识-数据操作

    动手学深度学习,笔记 1.首先导入torch库,我们使用pytorch主要使用这个库的函数 张量表示一个由数值组成的数组,这个数组可能有多个维度。具有一个轴的张量对应数学上的向量(vector); 具有两个轴的张量对应数学上的矩阵(matrix);具有两个轴以上的张量没有特殊的数

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包