| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 数据结构中的C语言编程基础 -> 正文阅读 |
|
[数据结构与算法]数据结构中的C语言编程基础 |
? 在学习数据结构时,需要我们编写许多的程序,对于一些变量的定义、结构体的声明、指针的使用,需要有一个统一的标准,这样才能方便我们使用、并简化记忆难度。 ? 本文结合自身的编程经验和高分笔记中对考研数据结构编程的一些建议,整理出这么一篇C语言编程入门基础,主要面向数据结构中数据类型的定义,希望能对你有所帮助。 1.Hello World示例
? 上面就是编程语言学习的’创世之光’–Hello World!,只要他执行成功了,那么我们就算是一只脚踏进了圈子。 ? 一个基础的C程序,主要包含五个部分:预处理器指令(include加载的头文件)、函数、变量、语句&表达式、注释。 2.C基础语法? C语言的基础语法,不在本文赘述,可以参考下面文章进行学习或复习。 ? C语言教程 3.输入与输出? 当我们提到输入时,这意味着要向程序填充一些数据。输入可以是以文件的形式或从命令行中进行。C 语言提供了一系列内置的函数来读取给定的输入,并根据需要填充到程序中。 ? 当我们提到输出时,这意味着要在屏幕上、打印机上或任意文件中显示一些数据。C 语言提供了一系列内置的函数来输出数据到计算机屏幕上和保存数据到文本文件或二进制文件中。 ? 当然,我们在基本的编程练习时,不需要涉及到文件的操作,只需要通过键盘、屏幕进行数据的输入与输出。在本文中,我们主要讲下scanf() 和 printf() 函数。 3.1输入? scanf函数的声明如下:
? 使用C的输入输出函数,有一点比较让初学者头疼,就是较为繁多的%s、%d等等。不过了解了之后,还是很方便使用的。
? 执行结果如下图所示,一定要注意,scanf中的format不要有过多的修饰,比如:scanf(“please input three numbers:%d%d%d”,&a,&b,&c),因为format决定了你输入数据时的结构。如scanf("%d%d%d",&a,&b,&c),几个输入之间可以使用空格分隔,而scanf("%d, %d, %d",&a,&b,&c),必须使用’,‘分隔,且’,'前不能有空格。 3.2输出? 输出的函数printf的声明如下:
? 其中的参数format是字符串,包含了要被写入到标准输出 stdout 的文本。它可以包含嵌入的 format 标签,format 标签可被随后的附加参数中指定的值替换,并按需求进行格式化。format 标签属性是 %[flags][width][.precision][length]specifier,具体讲解如下: ? 其余更细致的文档说明,可以参考这篇文档。
? 执行结果如下图所示: 4.数组4.1一维数组? 数组由多个相同数据类型的变量组合起来的,数组的声明方式如下,其中type为变量类型。
? 数组的初始化,可以通过定义时初始化或通过键盘输入初始化。主要代码如下:
? 执行结果如下: 4.2二维数组? C 语言支持多维数组。多维数组声明的一般形式如下:
? 一般我们只会用到二维数组,更高维度的数组理论上都是相同的。一个二维数组可以认为是带有x行、y列的表格,如int x[3][4],他是一个包含三行、四列的二维数组。 二维数组的初始化和一维数组类似,可参考下面代码:
? 当数组作为函数的参数是,函数的定义应当如何写?
5.指针? 指针一直是让人恐惧的知识点,但是在数据结构中,指针是你无法逃避的。不过指针的学习既简单又有趣,需要我们去正确的面对。通过指针,可以简化一些编程任务的执行。还有一些任务,如动态内存分配,没有指针是无法执行的。 ? 对于其他类型的变量,变量里装的是数据元素的内容,而指针变量里装的是变量的地址,通过它可以找出这个变量在内存中的位置,就像一个指示方向的指针,指出某个变量的位置。 ? 对于每种变量,指针的定义方法都有相似的规则,如以下语句:
? 与其他变量的定义相对比,指针型变量的定义只是在变量名之前多一个’*’。对于指针地址、变量的解释,可以参考下图: ? 指针使用的案例如下所示,更详细的用法还需要读者自行探索。
6.结构体? 了解结构体前,需要知道typedef。typedef可以理解为给现有的数据类型起一个新名字,如:
? 新定义的结构体没有名字,因此用typedef给他起个名字是有必要的。 ? 结构体就是系统提供给程序员制作新的数据类型的一种机制,即可以用系统已有数据类型(int,char,float…)或用户定义的结构型为原料,组合成用户需要的复杂数据类型。(可以理解成面向对象编程中的类) ? 一般而言,可以在创建结构体时定义变量,但是为了书写统一,我们先通过typedef定义新类型,在创建新的变量。
? 可以看到,结构体定义后,可以和int、char等基本数据类型一样使用,用于定义数组、指针等。当需要访问数组中的数据时,可以通过a1[index].a来访问。示例如下所示:
? 在数据结构中,结构体更常见的应用,是和指针结合起来构造结点(链表的结点、二叉树的结点等)。下面我们来一起看下常用结点的"构造"。 6.1链表结点? 链表结点有两个域:一个是数据域,用于存放数据;另一个是指针域(指针域可以有多个,如双向链表结点),用于存放下一个结点的位置,链表结点的结构型定义如下:
? 注意:凡是结构型内部含有指向和自己相同类型的指针,即Node结点中有指向Node结点的指针变量,则在定义Node的语句后,需要加上Node这个结构型的名字,如typedef struct Node。读者可以自己对比下上面定义和上一小节中TypeA定义的区别。 6.2二叉树结点? 二叉树结点的构造,也是由链表结点引申出来的,其余类型的结点也都可以类似的进行扩展。二叉树结点的结构型如下:
6.3创建新结点? 通过上面讲解,我们也基本知道了结构型结点的定义方法,定义方法还有其他的不同写法,不过我们不用关心太多,以增加记忆负担和理解难度。结构型定义好后,就要用它来制作新结点了。 ? 以二叉树结点为例,创建结点有以下两种写法:
? 其中,1理解起来比较容易;对于2,分为了两步,首先定义一个结点的指针bNode,然后通过malloc()来申请一个节点的内存空间,最后让指针bNode指向这片内存空间。 ? 其中malloc()函数很重要,需要掌握,以后所有的内存分配基本都可使用malloc()来完成。malloc()的函数声明如下:
? 通过malloc()申请空间的通用公式如下,其中①、②处填写你所定义的结构型名称,p为指针、指向新创建的结点,sizeof()函数用于测算所需要申请的空间大小。
? 我们还可以通过malloc()来动态的申请数组空间,相对于上面的申请方法,可以认为动态申请了一组空间,语法如下,可以通过p[1]来取第二个元素。
? 使用示例如下:
参考资料: 2.数据结构高分笔记 ? 又到了分隔线以下,本文到此就结束了,本文内容全部都是由博主根据自身理解与对考研资料进行的整理,仅作为参考,大佬有什么问题,可以评论区留言,如果有什么错误,还请批评指正。 ? 本专栏为数据结构知识,喜欢的话可以持续关注,如果本文对你有所帮助,还请还请点赞、评论加关注。 ? 有任何疑问,可以评论区留言。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 23:41:56- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |