- 博客(41)
- 收藏
- 关注
原创 数据结构-链表
目录1.链表的定义2.单链表的代码实现3.双向循环链表的代码实现4.链表和顺序表的对比1.链表的定义数据结构-顺序表_七月不远.的博客-CSDN博客https://blog.csdn.net/weixin_58165485/article/details/123381369在这篇文章中,笔者介绍了线性表的概念,线性表的逻辑结构——表示元素之间一一对应的相邻关系,满足这种线性有序的数据表示方式都可以称为线性表,对于数据元素在空间上的储存并不做要求线性表的顺序储存 (空间储存方式)
2022-05-19 16:13:10 138
原创 自测-4 Have Fun with Numbers (20分)
题目描述Notice that the number 123456789 is a 9-digit number consisting exactly the numbers from 1 to 9, with no duplication. Double it we will obtain 246913578, which happens to be another 9-digit number consisting exactly the numbers from 1 to 9, only in
2022-04-26 20:04:27 462
原创 程序的编译过程(简述)
目录前言1. 编译的流程2. 预编译3. 编译4. 汇编5. 链接前言对于一个C程序,通常的开发环境都是流行的集成开发环境(IDE) ,例如Visual Studio、devc++等。通常在IDE内部集成了编译器和链接器,以至于我们不需要关注编译和链接的细节,只需要注意编程语言的语法正确性就可以写成能成功运行的代码,这种依赖于IDE自行完成的构建过程往往让我们忽略了程序运行的机制与机理,有时甚至产生一些我们无法理解的错误,因此了解程序的编译过程,能够帮助我们分析程序运行的本
2022-04-22 20:06:33 4348
原创 #define的使用
目录前言1.#define定义标识符2. #define定义宏3.#define 替换规则4.宏和函数对比前言在很多C程序中,我们会在一个源文件的开头看到#define的字眼,和define的英文解释相同——可以理解为给xxx下定义,这里可以是标识符甚至是一个函数,接下来的内容将会对#define进行详解1.#define定义标识符使用#define可以用来定义标识符,所谓标识符可以简单理解为一个能够表示一定内容的符号,其格式为#定义 标识符...
2022-04-13 20:44:32 45607 5
原创 C语言-动态内存管理+通讯录
1. 程序内存1.1 程序运行时的内存在学习C语言时,我们经常需要为一个变量来分配一块内存空间,不同类型的变量所占用的内存空间也是不一样的,而每一个程序内部都有各种代码和数据需要存储在内存上。因此,了解内存空间的分配对我们理解程序的运行是极为有利的,下图介绍了Linux x86-64运行时的内存映像对于一个C程序,操作系统将会针对不同的数据类型在不同的内存局域上开辟空间对于静态变量及全局变量静态变量和全局变量被存储在数据段 ,在程序的整个运行周期都不销毁。其中,如果变量未初始化,则
2022-03-29 22:32:14 4607
原创 数组、结构体、联合、位断、枚举
目录前言1. 数组的分配与访问1.1 基本原则1.2 指针运算1.3 嵌套的数组1.4 定长数组1.5 变长数组2. 结构体2.1 结构体声明2.2 结构体的自引用2.3 结构体访存2.4 结构体变量的初始化2.5结构体内存对齐2.6修改默认对齐数3. 联合3.1 联合的定义3.2 联合的大小4. 位断4.1 位断的声明4.2 位断的内存分配4.3 位段的跨平台问题5. 枚举5.1 枚举定义...
2022-03-26 19:19:59 1030
原创 C语言-字符串函数+内存函数
1. 字符串函数1.1 strlen✨ 函数定义size_t strlen ( const char * str );✨ 函数作用:计算一个字符串的长度✨ 函数使用int main(){ char s[] = "qwerty" size_t len = strlen(s); //但其实这里的类型应该是size_t(无符号) printf("%zu", len); // 结果是6 return 0;}✨ 注意事项字符串已经 '\0' 作为结束.
2022-03-24 20:08:17 1215
原创 Y86-64的顺序实现
目录前言1. 指令处理的阶段2. Y86-64指令处理详解2.1 Opq、rrmovq、irmovq2.2 rmmovq和mrmovq2.3 push和pop2.4 jXX、call和ret3. SEQ硬件结构3.1 取指阶段3.2 译码阶段3.3 执行阶段3.4 访存阶段3.5 写回阶段3.6 更新PC4.小结前言构造了一个Y86-64指令集后,我们可以实现一个基于Y86-64指令的处理器,称为SEQ(sequential...
2022-03-22 10:46:15 1863
原创 Y86-64指令集体系结构
前言:本章内容是笔者学习csapp的一些读书笔记,其中大部分内容来自原书,并加入了一些自己的注释指令系统是计算机软件和硬件交互的接口,由于x86指令集相对复杂,书中定义了一个简单的指令集 “Y86-64” ,能够满足一个处理器对于指令集的基本需求1.程序员可见状态在这里,“程序员” 既可以是用汇编代码写程序的人,也可以是产生机器级代码的编译器程序员的可见状态是指:Y86-64中的每条指令都会读取或者修改处理器状态的某些部分,如程序寄存器、条件码、程序计数器(PC)、内存以及程序状态等
2022-03-17 18:02:03 5919 3
原创 条件码、条件控制和条件传送
1.条件码我们已经知道,直线代码的行为是指令一条接着一条执行的,也就是顺序执行——当本行代码执行完成后才会往下执行下一行的代码。但某些c语言结构,如条件语句,循环语句和分支语句,需要满足一定条件才能执行,最简单的如 if - else语句和 while 语句:if (test-expr) then-statement;else else-statement;init-expr;while(test-expr).
2022-03-15 21:39:39 2710
原创 数据结构-顺序表
1.顺序表的定义要理解何为顺序表,先要知道什么是线性表线性表是具有相同数据类型的 n (n>0)个数据元素的有限序列若用 L 命名线性表,则其一般表示为:从这里可以体现出线性表的几个特点 :存在唯一的首元素(表头元素)和尾元素(表尾元素) 除第一个元素外,每个元素有且仅有一个直接前驱 除最后一个个元素外,每个元素有且仅有一个直接后继下面这个表就是一个线性表:1 2 3 4 5 对于表头元素1,只有一个后继元素2对于元素2,只有一个.
2022-03-09 17:11:57 1410
原创 C语言-整数存储与位操作符详解及应用
目录1. 整数在计算机中的存储1.1 整形类型1.2 整数在内存中的储存形式1.2.1 原码、反码、补码1.2.2 大小端介绍2. 三种位操作符3. 位操作符应用实例3.1 例题13.2 例题23.3 例题31. 整数在计算机中的存储1.1 整形类型当我们敲下这样一段代码:int a = 10;int b = -10;我们便在内存中分配了一块空间,并将10这个数字存了进去。而这块空间的大小与整形的类型有关,C语言中,整形的类型有:c
2022-02-05 21:30:24 868
原创 C语言实现扫雷(基础版)
目录1. 扫雷的背景和起源1.1 背景1.2 起源2. 扫雷的规则3. 扫雷的C语言实现3.1 扫雷的基本逻辑3.2 打印开始菜单提供给用户3.3 使用二维数组初始化棋盘3.4 在棋盘上布置“雷”3.5 打印棋盘3.6 实现排雷逻辑和胜负关系判断4. 总结1. 扫雷的背景和起源1.1 背景扫雷在科技历史上也扮演了相似的角色。这个基于数字的逻辑谜题最早来自20世纪六七十年代,当时Jerimac Ratliff推出的名为“Cube”的游戏已经非常受.
2022-01-24 14:24:31 2847 1
原创 C语言小项目——三子棋的实现
1.预备知识——数组1.1数组的定义数组是一组相同类型元素的集合所谓的相同元素,是指在同一个数组中,所有的元素类型必须一致。如整形数组只能存放int整形变量,字符数组只能存放char类型字符变量,不能混合存放。1.2数组的创建和初始化对于数组,需要先创建和初始化才能使用,常见的数组有一维数组和二维数组,这两种数组的创建和初始化分别为:一维数组的创建int arr[10]; //int是数组元素类型的定义,arr是数组名,[10]表明数组内元素个数是 10一维..
2022-01-23 13:56:36 332 1
原创 C语言递归思想实现汉诺塔
目录1.递归思想简介2.汉诺塔问题3.汉诺塔递归的c语言实现1.递归思想简介在c语言中,程序调用自身的编程技巧称为递归( recursion)。递归的定义看上去似乎很抽象,使用代码描述能够让人容易理解,下面是一个函数递归的例子。/* 递归求n的阶乘 */int factorial(int n) //定义一个求阶乘的函数叫做factorial(),需要一个整形参
2022-01-20 21:37:21 675 1
原创 利用rand()和srand()产生随机数编写猜数字游戏
目录1.rand和srand介绍2.如何使用rand和srand3.常见到的问题4.用C语言实现猜数字游戏1.rand和srand介绍在C语言中,当我们需要产生伪随机数的时候,我们往往会使用rand()和srand()两个函数,他们是一对相辅相成的函数。在MSDN中搜索rand函数,你会看到如下图所示的内容:使用rand函数能够生成随机数,但这个数并非完全随机,而是伪随机数。在使用之前我们需要引一个名为stdlib的库函数。 在调用之后,rand函数将会返回一个范围为0
2022-01-17 21:02:32 3574 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人