自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 类与对象(上)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录类的引入类的访问限定符类的作用域类的实例化如何计算类对象的大小结构体内存对齐规则this指针this指针的特性类的引入C语言中,结构体中只能定义变量,在C++中,结构体内不仅可以定义变量,也可以定义函数。结构体的定义,在C++中更喜欢用class来代替。class className{ // 类体:由成员函数和成员变量组成 }; // 一定要注意后面的分号类的两种定义方式:1、声明和定义全部放在类体中,需要

2021-02-04 10:31:54 145

原创 C++入门

文章目录一、内联函数二、auto关键字(C++11)三、范围for四、指针空值nullptr(C++11)C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。C++是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成。一、内联函数以inline修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销。内联函数可以提升程序运行的效率。inline int add (int a, int b){ return

2021-02-02 22:42:12 94

原创 Linux基础知识(二)

文章目录一、调试器流程控制指令内存控制指令二、项目的自动化构建工具Makefilemake一、调试器调试器的功能:调试、观察程序的运行过程,通常目的都是为了排查程序的运行错误。程序的错误分类:编译错误、链接错误、运行时错误(运行中逻辑错误以及程序运行时崩溃)。调试程序的前提:程序必须是一个debug版本的程序。由于gcc/g++默认生成release版本程序,因此若要生成debug版本,则使用-g选项gcc -g test.c -o test。可执行程序的分类:debug调试版不对代码进行优化,

2021-02-02 20:58:14 116

原创 Linux基础知识(一)

文章目录一、软件包管理工具二、编辑器三、编译器:gcc/g++一、软件包管理工具yum:管理当前系统中能够安装的工具以及可以卸载的工具、并且实现安装以及卸载操作。(可以类比手机上的应用商店应用)1、查看所能安装的软件工具:yum list 显示所有工具、yum search keyword 根据关键字查找指定工具。2、安装一个指定工具:yum install package name。例如:sudo yum install gcc gcc-c++ gdb git。3、卸载一个指定工具:yum r

2021-02-01 22:09:29 114

原创 快速排序:挖坑法、前后指针法和三数取中优化

上一篇博客中,我们看过了快速排序的基本方法——霍尔法的递归实现。事实上,区间划分也可以通过挖坑法和前后指针法来完成,从而实现快速排序。那么本篇博客,我们来讲解这两种方法。一、挖坑法顾名思义,此方法的思路是将位置空出来(存入临时变量),再将找到的数据填入这个空白位置。如下图:可以看到,利用end和begin寻找比基准值小和大的元素的思路不变,在寻找到之后,直接将找到的元素“填入”“坑”中,最后再将基准值填入,就完成了一趟排序。代码如下:int partition2(int* arr, int be

2021-01-28 15:08:30 364

原创 快速排序的实现(hoare划分)

原理快速排序的本质是给基准数据寻找合适位置的过程。以升序为例,每一趟排序结束以后,可以保证基准数据左边的数据全部小于它,右边的数据全部大于它,这也表明这一基准数据已经处于它的最终位置了。想要做到上述这一点,基本方法(称为霍尔(Hoare)法))如下:1、将需要排序的区间中的第一个数据作为基准数据,记为key2、从区间的最后一个数据向前寻找小于key的数据,记为end3、从区间的第一个数据向后寻找大于key的数据,记为begin4、交换begin和end所在位置的数据,重复2、3的操作5、若be

2021-01-25 22:07:41 857

原创 二叉树非递归遍历

文章目录一、准备工作二、前序遍历三、中序遍历四、后序遍历LeetCode OJ链接:144. 二叉树的前序遍历 https://leetcode-cn.com/problems/binary-tree-preorder-traversal/94. 二叉树的中序遍历 https://leetcode-cn.com/problems/binary-tree-inorder-traversal/145. 二叉树的后序遍历 https://leetcode-cn.com/problems/binary-t

2021-01-24 21:06:35 88

原创 堆向下调整的实现

我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆。向下调整算法有一个前提:左右子树必须是一个堆,才能调整。思路以小堆为例,向下调整的实质就是将根节点与比它小的节点交换,逐渐下移,直到其子节点不再比它小为止。由此我们可以进行以下操作:1、将根节点设为cur2、进入循环,利用2 * cur + 1 找到左孩子,比较左孩子和右孩子的值,取其中较小的一个child3、cur与这个child进行比较。若cur > child,则交换两数,并且将cu

2020-12-30 22:40:40 251 2

原创 力扣 622. 设计循环队列

题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/design-circular-queue设计你的循环队列实现。 循环队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。循环队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。但是使用循环队列,我们能使用这些空间去存储新的值。你的实

2020-12-29 20:41:29 123

原创 力扣 232. 用栈实现队列

题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-queue-using-stacks请你仅使用两个栈实现先入先出队列。队列应当支持一般队列的支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回

2020-12-28 23:01:13 98

原创 力扣 225. 用队列实现栈

题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-stack-using-queues使用队列实现栈的下列操作:push(x) – 元素 x 入栈pop() – 移除栈顶元素top() – 获取栈顶元素empty() – 返回栈是否为空注意:你只能使用队列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 这些操作是合法的。你所使用的语言也

2020-12-28 22:16:31 91

原创 双向循环链表的实现

每个节点只有一个后继指针的链表称为“单向链表”。由于单向链表无法寻找到某一节点的前驱节点,执行尾插等操作时需要遍历整个链表,增加了算法的时间复杂度,容易影响整体效率。为了解决这一问题,引入了双向链表。增加一个指针变量,用于指向每个节点的前驱节点。将双向链表的尾节点的后继指针指向链表的头结点,头结点的前驱指针指向尾节点,就构成了双向循环链表。C语言实现定义数据类型、节点和链表结构体#include <stdio.h>#include <stdlib.h>typedef

2020-12-17 21:44:36 1007

原创 力扣 剑指 Offer 56 - I. 数组中数字出现的次数

题目来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof题目要求一个整型数组 nums 里除两个数字之外,其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。示例 1:输入:nums = [4,1,4,6]输出:[1,6] 或 [6,1]示例 2:输入:nums = [1,2,10,4,1,4,3,3]

2020-12-06 14:26:12 242

原创 动态顺序表的实现

动态顺序表的实现使用C语言实现动态顺序表。首先定义顺序表的数据类型的结构:typedef int SLDataType;typedef struct seqList{ SLDataType* _data; size_t _size; size_t _capacity;}seqList;顺序表有3个成员变量。size表示当前表内的数据个数。capacity表示表的容量。由于是动态顺序表,不能直接使用数组存储数据,而是需要申请动态内存,因此设置_data成员变量为指针类型。主要涉及以下

2020-12-06 13:14:35 451

原创 程序的预处理

文章目录详解编译+链接一、pandas是什么?二、使用步骤1.引入库2.读入数据总结详解编译+链接组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接到程序中一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.

2020-12-02 15:24:40 393

原创 常用文件操作函数

文章目录前言什么是文件为什么要使用文件文件名文件类型一、文件的打开与关闭二、文件的顺序读写fread2.读入数据总结前言什么是文件在程序设计中,我们一般谈的文件有两种:程序文件、数据文件。程序文件包括源程序文件(后缀为.c),目标文件(windows环境后缀为.obj),可执行程序(windows环境后缀为.exe)。数据文件文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件。这里我们讨论的是数据文件。我们以前所处理数据的输入输出都是

2020-11-29 14:26:44 884

原创 动态内存管理例题

文章目录为什么存在动态内存分配一、动态内存函数的介绍malloc和free常见的动态内存错误内存泄漏callocrealloc二、内存区域的划分三、四个经典笔试题为什么存在动态内存分配我们已经掌握的内存开辟方式有: int val = 20; char arr[10] = {0};但是上述的开辟空间方式有两个特点:1.空间开辟大小是固定的。2.数组在申明的时候,必须指定数组的长度,它所需要的内存在编译时分配。但是对于空间的需求,不仅仅是上述的情况。有时候我们需要的空间大小在运行的时候..

2020-11-26 17:21:27 167

转载 运算优先级

本文转载自C语言中文网:http://c.biancheng.net/view/285.html前言C语言的运算优先级经常会让许多初学者头疼不已。在此列表总结,避免今后再次犯错。优先级运算符结合律1后缀运算符:[]  ()  ->  ++  - -  (类型名称){列表}从左到右2一元运算符:++  - -  !  ~  + -  *  &  sizeof_Alignof从右到左3类型转换运算符:(类型名称)从右到左4乘除法运算符

2020-11-25 14:19:34 195

原创 结构体、枚举、联合的用法

文章目录前言一、结构体1、声明2、结构体内存对齐3、位段什么是位段二、枚举1、枚举类型的定义三、联合体前言一、结构体1、声明结构体的声明如下例:struct Student { char name[1024]; int age;};注意:C 语言中要求, 结构体内部不能包含自己这种结构体类型的成员。如下代码是不能编译通过的。struct School { struct Student students; struct School school;};想象一下,以上代码如何

2020-11-23 23:27:29 555

原创 字符串函数和内存操作函数

文章目录前言一、常用字符串函数1.strlen2.strcpy字符串拷贝3.strcat字符串拼接4.strcmp字符串比较5.strstr查找子串6.strtok字符串切分二、常用内存函数1.memcpy拷贝2.memmove重叠拷贝补充——关于合法性判定前言C语言中对字符和字符串的处理非常频繁,但是C语言本身是没有字符串类型的,字符串通常放在常量字符串中或者字符数组中。字符串常量适用于那些对它不做修改的字符串函数。一、常用字符串函数1.strlensize_t strlen ( const

2020-11-23 22:08:51 154

原创 sizeof和strlen总结

文章目录前言一、整形一维数组二、字符型一维数组三、整形二维数组四、另一些例子总结前言sizeof和strlen的使用是C语言面试的必考考点,并且对于初学者属实不太友好,稍有不慎就会踩坑。昨日接触了一些题目,特地总结一下这类题目的解题方法。一、整形一维数组示例: int arr[] = { 1, 2, 3, 4 }; printf("%d\n", sizeof(arr)); // 16定义了一个元素个数为4的整形数组,sizeof(arr)显然是求数组所占的空间大小,由于一个整型变量占用.

2020-11-16 20:12:59 127

原创 数据在内存中的存储和指针进阶

文章目录前言一、结构体成员变量的调用二、数据在内存中的存储1.整数在内存中的存储2.字节序3.原码、反码、补码4.浮点数在内存中的存储三、指针的进阶1.字符指针2.指针数组和数组指针前言11月10日为止,基本学完了C语言的基础知识,并且开始学习数据在内存中的存储和指针进阶的知识。在此总结一下当日所学。一、结构体成员变量的调用如何调用结构体中的成员变量呢?有以下两种方法:1、如果是结构体变量,则使用.2、如果是结构体指针,则使用->另外,结构体作为函数的参数时,一般建议通过传指针的方

2020-11-12 15:20:13 609

原创 C语言实现扫雷游戏(可以自动展开)

文章目录前言一、游戏规则二、游戏流程1.初始化地图2.打印地图3.玩家翻开格子4.更新地图和自动展开总结前言本篇博客主要介绍如何使用C语言实现扫雷游戏。一、游戏规则在一张ROW行COL列的地图上存在MINE_COUNT个地雷。玩家输入坐标翻开格子,若没有踩雷,则计算此格子周围8个格子的地雷总数,并将此格子的星号用数字代替。若数字为0,则继续递归计算与此格子相邻的4个格子周围的地雷情况(即自动展开)。若踩雷,则游戏结束。当地图上的数字与星号之和等于格子总数时,判定为玩家胜利。宏定义如下:#def

2020-11-03 18:47:15 767 1

原创 C语言实现三子棋

文章目录前言一、游戏规则二、游戏流程1.创建棋盘并初始化2.打印棋盘3.玩家落子4. 判定胜负关系5. 电脑落子(随机位置落子)6. 判定胜负关系三、game函数和主函数四、总结前言本篇博客主要介绍如何使用C语言实现三子棋游戏。一、游戏规则玩家在一张9*9的棋盘上与电脑下棋,玩家使用“X”作为棋子,电脑使用“O”作为棋子。其中一方3个棋子连成一线则获胜;若棋盘铺满仍未有一方获胜,则视为和棋。二、游戏流程1.创建棋盘并初始化使用字符型数组作为棋盘,初始化即将数组内所有元素设为空字符。代码如下

2020-11-03 17:37:06 119

原创 函数与数组初阶

目录函数与数组零散知识点随机数与随机种子函数数组代码打印素数(穷举法)数字9出现的次数二分查找函数字符汇聚效果进度条效果登录界面问题与解决函数与数组本篇博客总结一下近十余天的学习收获。主要涉及函数以及数组的知识。零散知识点1、printf叫作“格式化打印”,print format。%d叫作“格式化字符串”。2、使用strlen函数时需要包含对应的库函数。C语言内置的库函数其实非常少(几百个)。相比之下,Java、Python等更加现代的语言,支持的库函数要更加丰富和庞大。3、变量/函数 常见的

2020-10-29 19:31:22 169

原创 分支与循环初阶

2020-10-14近期知识的整理与总结一些细节分支与循环求最大公约数、求闰年阶乘求和函数二分查找函数字符汇聚效果进度条效果登录界面问题与解决近期知识的整理与总结大半个月过去,对C语言有了更多的认识,写本篇博客以记录一些学习过程中的细节。重点在于了分支和循环语句的语法和使用场景。一些细节1、C语言需要通过编译器进行编译,将文本代码转换成二进制的可执行exe文件。2、程序在运行时,都要先被加载到内存。3、变量是在内存中被定义的,因此需要开辟内存空间。4、若全局变量和局部变量重名,就近选择局部变量

2020-10-14 18:21:45 208

原创 第一篇博客

目录第一篇博客——开始学习编程自我介绍目标如何学习时间安排第一篇博客——开始学习编程昨日开始学习C语言,为自己的编程生涯开了一个头,故写一篇博客记录自己的学习历程。自我介绍本人是陕西科技大学电子信息工程专业2020届本科毕业生,拟于2021年初至澳大利亚新南威尔士大学攻读Information Technology专业Database Systems方向硕士学位。目标计划在1-2年的时间内熟练掌握C语言、C++或Java、Linux、MySQL等相关知识,并找到合适的研发岗位进行实习,后续进入相

2020-09-26 17:43:30 177 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除