自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法——回溯

回溯算法

2022-09-04 14:24:07 169 1

原创 c++——string的模拟实现

标准库中的string类string是表示字符串的字符串类该类的接口与常规容器的接口基本相同,再添加了一些专门用来操作string的常规操作。string在底层实际是:basic_string模板类的别名,typedef basic_string<char,char_traits,allcator>string;不能操作多字节或者变长字符的序列。在使用string类时,必须包含#include头文件以及using namespace std命名空间;string类对象的容量操

2022-05-30 22:04:06 146

原创 模板——初识

函数模板代表了一个函数集群,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特性类型版本。简而言之就是会根据使用场景进行适配。函数模板格式trmplate<typename T1,typename T2,...,typename Tn>返回值类型 函数名(参数列表){}例如:template<typename T>void Swap(T& left, T& right){ T temp = left; left = rig

2022-05-07 16:27:00 105

原创 C/C++内存管理

c/c++内存分布首先看一道题:int globalVar = 1;static int staticGlobalVar = 1;void Test(){ static int staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 = (int*)malloc(sizeof (int)* 4); i

2022-05-07 11:49:39 90

原创 类和对象运用

构造函数的深入应用初始化列表以一个冒号开始,接着是一个以逗号分开的数据成员列表,每个“成员变量”后面跟一个放在括号中的初始值或表达式。class date{public: date(int year, int month, int day) :_year(year), _month(month), _day(day) {}private: int _year; int _month; int _day;};每个成员变量在初始化列表中只能出现一次。(因为初始化只能

2022-04-29 14:33:33 56

原创 C++日期类的实现

类的默认成员函数如果一个类中什么都没有简称空类,实际上会自动生成六个默认的成员函数。构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内之调用一次。需要注意构造对象的主要任务并不是构造而是初始化对象。特性函数名与类名相同。class Date{ Date(){}};无返回值。对象实例化时编译器自动调用相应的构造函数。构造函数可以重载。class Date{ Date

2022-04-20 15:11:14 695

原创 linux--进程概念

进程概念程序的一个执行实例,正在执行的程序等。担任分配资源(cpu时间,内存)的实体。进程是静态的。(进程是程序在处理机上一次执行的过程)进程是动态的过程。(一个程序可作为多个进程的运行程序)一个作业可有多个进程组成。进程只是暂时的。进程是资源管理的最小单位。描述进程-PCB进程信息被放在一个名为进程控制块的数据结构中,可以理解为进程的集合。通常被称为PCB,在Linux下的PCB是:task_structtask_struct是Linux内核中的一种数据结构,它会被装载到

2022-04-20 10:25:34 85 1

原创 二叉树的遍历及实现

二叉树的遍历所谓二叉树的遍历是直观的感受二叉树结构的最简单的方法。利用某种规则对二叉树中的每一个结点都进行相应操作。在此主要介绍四种遍历方式:前序遍历前序遍历就是由根开始的先左再右的循环结构。具体可表现为:其最终遍历结果为:A B D H I E J C F K G中序遍历中序遍历实际上就是一种树结构投影到一条线上的投影最终遍历结果为:H D I B J E A F K C G后序遍历我们可以将后序遍历理解为摘果子,先摘矮的好摘的再摘高的。即先

2022-04-18 10:58:47 1986 1

原创 冯诺依曼体系与操作系统

冯诺依曼体系结构目前常见的计算机大部分都遵循冯诺依曼体系。存储器指内存 上图中CPU只能对内存进行读写,不能访问外设。所有设备都只能直接与内存接触操作系统任何计算机系统都包括一个基本的程序集合。包括:内核(进程管理,内存管理,文件管理,驱动管理) 其他程序(函数库,shell程序等)涉及OS的目的与硬件交互,管理所有软硬件资源为用户程序提供良好的执行环境系统调用和库函数在开发角度:操作系统会对外表现为一个整体,但会暴漏部分接口供上层开发使用,这部分接口就为系统调用。

2022-04-13 18:24:05 963

原创 类的初识与this指针

类面向对象的三大特性:封装,继承,多态类的定义class为定义类的关键字,ClassName为类的名字,{}为类的主体。类中的元素称为类的成员:类中的数据被称为类的属性或是成员变量;类中的函数称为类的方法或者成员函数。class className{ //类体:由成员函数和成员变量组成};//分号必须有类的两种定义方式声明和定义全部放在类体中class time{public: void shoutime(){ cout << year << "

2022-04-13 17:12:11 89

原创 命名空间,引用等C++入门知识

C++关键字c++中总计有63个关键字,C中有32个关键字。命名空间使用命名空间的目的是对标识符的名称进行本地化,避免命名冲突或名字污染。命名空间定义(有三种方式)namespace N{ int a = 5; int b = 3; int add(int left, int right){ return left + right; } int sub(int left, int right){ return left - right; }}加命名空间名称及作

2022-04-13 15:53:12 1081

原创 二叉树的认识与堆的实现

树树是一种非线性的数据结构,它是一个由有限个结点组成的具有层次关系的集合。因为其结构酷似一棵根朝上叶朝下的树,所以被命名为树树有一个特殊的结点,被称为根结点,根结点是树中唯一没有前驱的结点。除根结点以外其余结点又被分为N个互不相交的集合,每一个集合又可以被称为树。树是递归定义的。在树形结构中,子树之间不能有交集。节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为4叶节点或终端节点:度为0的节点称为叶节点; 如上图:C、F、G等节点为叶节点非终端节点或分支节点:

2022-04-13 11:25:14 330

原创 队列和栈的相互实现

队列实现栈可以考虑用两个队列实现一个栈,每次总保持一个队列为空。此时的入栈操作即为入队操作。 出栈操作即飞空队列的队尾元素出栈,此时要把队列中其他元素移动到另一个空栈中,然后出最后一个元素。利用队列替代栈的节点:typedef struct { Queue q1; Queue q2; } MyStack;主体实现:typedef struct { Queue q1; Queue q2;} MyStack;//创建栈MyStack* mySt

2022-03-28 17:32:50 90

原创 双链表的增删改查(c语言)

链表的分类1:单向或双向2:带头或不带头3: 循环或非循环此上所属种类便可组成八种不同的链表,但其实最常用的链表也就两种:1:无头单项非循环链表结构简单,不会单独用来存储数据,更偏向于作为其他数据结构的子结构。2:带头双向循环链表结构复杂,一般用来单独存储数据,一般实际使用的链表都是双向带头循环链表。双向带头链表的实现:双向循环链表的节点由三部分组成:节点的创建:typedef int LTDataType;typ...

2022-03-28 16:19:47 1758 1

原创 数据结构——队列的实现

队列队列的概念及结构1.1 概念队列:只允许在一端对数据进行插入,另一端进行删除的特殊线性表。队列具有先进先出的特性1.2 实现与栈类似队列也可以用数组和链表的结构实现。使用链表为更优选。因为使用数组会降低效率特殊的队列:环形队列:可以用数组实现也可以用循环链表实现。其中空队列和满队列的判断较为模糊,所以有:为了可使Q.front=Q.rear判断对空还是队满,认为2图出现的情况为队满,即此时有:rear+1=front3 队列的具体实现使用带头结点的单链表

2022-03-23 15:17:02 566 1

原创 数据结构——栈的实现

一、栈的概念及结构栈:一种特殊的线性表,只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底压栈:栈的插入操作,也称进栈/入栈,在栈顶操作。出栈:栈的删除操作,也在栈顶操作。栈始终遵循后进先出原则。二、栈的实现栈的实现一般可以使用数组或链表,相对来说数组的结构更优数组在尾上插入数据的代价较小。typedef int STDataType;typedef struct Stack{ STDataType* _a; int

2022-03-23 10:57:41 177

原创 算法的时间与空间复杂度

在我们了解什么是算法的时间与空间复杂度之前,我们要先了解算法效率:算法效率:算法执行的时间,算法执行时间需通过依据该算法编制的程序在计算机上运行时所消耗的时间来度量。一个算法的好坏可以从算法效率上得到最直观的比较。算法复杂度算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即时间复杂度和空间复杂度。由此引出:时间复杂度:衡量一个算法的运行快慢。空间复杂度:衡量一个算法运行所耗费的额外空间。1.时间复杂

2022-03-23 09:21:45 158

原创 c++类与对象

日期类的实现代码如下:#include<iostream>using namespace std;class Date{public: // 获取某年某月的天数 int GetMonthDay(int year, int month){ static int days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; int day = days[month]; if (month == 2 &

2021-10-22 21:58:01 44

原创 C++ This指针

This指针一:定义:在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。二:使用场景1.this只能在成员函数中使用:成员函数默认第一个参数为T* const register this。2.this指针不能在静态函数中使用:静态函数如同静态变量一样,他不属于具体的哪一个对象,静态函数表示了整个类范围意义上的信息,而this指针却实实在在的对应一个对象,所以this指针不能被静态函数使用。

2021-10-19 17:12:29 123

原创 linux初识

在学习Linux的过程中:首先,要创建一个虚拟机,利用xshell等工具简化,个性化虚拟机的操作。其次,清楚的认识基本的Linux的常用指令。Linux常用基础指令可以从以下几个方面展开:1:目录指令ls(-la<隐藏信息>)列出目录信息。pwd显示用户当前所在目录。mkdir(-p<路径名称>)在当前文件夹下创建名为dirname的目录。rmdir(-p<当子目录被删除后如父目录也为空则一并删除>)与mkdir相对,删除当前目录。rm(-r<删除

2021-10-13 16:12:31 57

原创 c++中inline的使用

**inline关键字:****定义:**inline是C++关键字,在函数声明或定义中,函数返回类型前加上关键字inline,即可以把函数指定为内联函数。**作用:**可以解决一些频繁调用的函数大量消耗栈空间(栈内存)的问题。 **限制:**关键字inline必须与函数定义放在一起才能使函数成为内联函数,仅仅将inline放在函数声明前面不起任何作用。inline是一种“用于实现”的关键字,而不是一种“用于声明”的关键字。**内联函数:**内联函数是在函数原型的前面加上inline (

2021-09-26 21:22:45 141

原创 顺序表操作

顺序表的增删改查typedef int SLDateType;typedef struct SeqList{ SLDateType* a; size_t size; size_t capacity;}SeqList;//函数声明// 对数据的管理:增删查改 void SeqListInit(SeqList* ps, size_t capacity);//定义void SeqListDestory(SeqList* ps);//清除void SeqListPrint(SeqList* p

2021-09-07 09:41:08 35

原创 字符串旋转结果

题目:写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。例如:给定s1 =AABCD和s2 = BCDAA,返回1给定s1=abcd和s2=ACBD,返回0.AABCD左旋一个字符得到ABCDAAABCD左旋两个字符得到BCDAAAABCD右旋一个字符得到DAABC本题主要运用或与操作来实现字符串得左旋。再利用strcmp函数来实验字符串的对比。void revolve(char* start, char* end, int k){ while (*end != '\0')

2021-06-03 21:46:56 112

原创 打印杨辉三角

题目:作业内容在屏幕上打印杨辉三角。11 11 2 11 3 3 1……杨辉三角性质很多,在此我们仅考虑:每个数等于它上方两数之和。每行数字左右对称,由1开始逐渐变大。第n行的数字有n项。前n行共[(1+n)n]/2 个数。代码如下:#define H 9//限定最高行并且第n行的数字有n项void yhsj(int arr[H][H]){ for (int row = 0; row < H; row++){ for (int col = 0; col <=

2021-05-31 16:25:12 132

原创 喝汽水问题

问题:喝汽水,1瓶汽水1元,2个空瓶可以换一瓶汽水,给20元,可以多少汽水(编程实现)。int main(){ int m = 0; printf("钱数:"); scanf("%d", &m); int count = m;//最开始买的汽水m瓶。 int p = m;//剩下的瓶子. while (p >= 2){ count = count + p / 2;//可以喝的瓶数。 p = p / 2 + p % 2;//瓶子个数。 } printf("总共可以喝%

2021-05-23 14:17:18 72

原创 打印菱形

用C语言在屏幕上输出以下图案:int main(){ int row = 0; int i = 0; printf("请输入菱形的最大行:\n"); scanf("%d", &row); //打印上半部分。 for (i = 0; i < row; i++){ for (int j = 0; j < row - 1 - i; j++){ printf(" "); } for (int j = 0; j < 2 * i + 1; j++){ p

2021-05-23 13:53:50 47

原创 水仙花数

题目:求出0~100000之间的所有“水仙花数”并输出。“水仙花数”是指一个n位数,其各位数字的n次方之和确好等于该数本身,如:153=13+53+3^3,则153是一个“水仙花数”。int fun_mi(int a, int b){//创建a的b次方的函数。 if (b != 0){ return a*fun_mi(a, b - 1); } else{ return 1; }}int main(){ printf("1—100000之间的水仙花数为:"); for (int

2021-05-23 13:17:36 73

原创 字符串逆序

题目:写一个函数,可以逆序一个字符串的内容。void reverse(char *str){ if (str == NULL){ return; } char *head = str; char *end = str + strlen(str) - 1; while (head < end){ char temp = *head; *head = *end; *end = temp; head++; end--; }}int main(){ char st

2021-05-17 14:47:47 131

原创 使用指针打印数组内容

题目写一个函数打印arr数组的内容,不使用数组下标,使用指针。arr是一个整形一维数组。#include <stdio.h>#include <stdlib.h>int main(){ int arr[] = { 1, 2, 3, 4, 5, 6 ,7 ,8 , 9 }; int *p = arr; int len = sizeof(arr) / sizeof(arr[0]); for (int i = 1; i < len; i++) { printf

2021-05-17 14:24:28 45

原创 统计二进制中1的个数

描述:作业内容写一个函数返回参数二进制中 1 的个数。比如: 15 0000 1111 4 个 1思路:利用异或,使二进制数中与1异或为0的数记录下来。代码如下:int main(){ int m = 0; int count = 0; printf("请输入:\n"); scanf("%d", &m); for (int i = 31; i >= 0; i--){ if ((((m >> i) & 1)^1)==0){ co

2021-05-09 13:55:58 57

原创 求两个二进制数中相同的数

问题描述:两个int(32位)整数m和n的二进制表达中,有多少个位(bit)不同?输入例子:1999 2299输出例子:7思路:将两个整数全体右移一位并&1,然后每位比较,若等于1则表明不同。具体程序如下:int main(){ int m = 0; int n = 0; int count = 0; printf("请输入比较的数:\n"); scanf("%d %d", &m,&n); for (int i = 31; i >= 0; i--){

2021-05-09 13:00:34 460

原创 扫雷小游戏

扫雷小游戏(利用数组,循环,函数等创建的可操作游戏)步骤如下:1:创建界面,分为最初的显示界面(利用printf)和翻开棋子后的显示界面(周围地雷个数)以及雷区分布的隐藏界面(不可见,理解为游戏的内部属性,利用rand函数与时间戳创造真随机)。2:创建一个9*9的数组。3:玩家输入坐标。4:判断是否踩雷:否,游戏继续进行,并显示周围雷的个数。是,游戏结束,失败。5:判断是否所有没有雷位置都被翻开。是,游戏结束,获胜。否,游戏继续进行,重复5。具体执行代码如下:#include<

2021-04-29 11:57:29 138 2

原创 三子棋小游戏的实现

利用数组来创建一个三子棋小游戏的步骤如下:1:建立一个可以容纳九个元素的3*3棋盘。并初始化,使所有位置都为三。2:打印棋盘,使其尽可能美观。3:玩家通过输入坐标(row,col)来落子。4:判断输赢(是否有三个棋子相连)。5:电脑随机落子(利用时间戳,实现真随机)。6:判断输赢。实现代码如下:#define MAX_ROW 3 #define MAX_COL 3 void init(char chess[MAX_ROW][MAX_COL]){ for (int row = 0; row

2021-04-27 00:02:00 129 1

原创 2021-04-05

一、自我介绍我是一个来自陕西科技大学,信息与计算科学专业的学生,机缘巧合下进了数学系,入了编程的门。我是一个坐不住的人,但是在面对编程这件事上,我愿意沉下心,耐心学习。二、编程目标最起码七万行代码,可以独立完成一个中高等难度的编程问题。三、如何学习编程耐心学习一门基础语言,夯实自己的编程基础,多敲代码,多读代码,永远怀着学徒的心。四、学习时间弹性的学习时间才能最大程度发挥学习能力,当然,每天坚持敲代码。五、最想进入的IT公司网易,据说网易的食堂很好。...

2021-04-05 16:12:06 77

空空如也

空空如也

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

TA关注的人

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