自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 c++零基础语法课--1

文章目录@[toc]1.命名空间1.1命名空间的实质1.2命名空间的使用2.函数重载实质:名字修饰(name mangling)应用:“extern”关键字3.引用1.引用特性:2.常引用3.使用场景1.命名空间1.1命名空间的实质命名空间的实质是重新生成了一个作用域,该作用域中可以命名属于自己的变量名称,这些名称可以和外部变量同名,但内部不能同名。1.2命名空间的使用1.命名空间中的内容,既可以定义变量,也可以定义函数2.命名空间可以嵌套namespace N2{ int a; int

2021-05-19 21:00:47 433 8

原创 二叉树---判断完全二叉树

解题思路完全二叉树:一棵树按层序遍历时,如果遇到NULL时,后面没有节点,那么他便是一棵完全二叉树。否则他便不是一棵完全二叉树。解题思路:我们利用队列这一数据结构,将树的元素按层入队列(过程类似层序遍历,区别在于NULL我们也得入队)。当我们出队时,遇上了NULL,我们便对队列内的元素进行判断,如果队列中全部为空,那么他便是一颗完全二叉树。代码实现typedef char BTDataType;typedef struct BinaryTreeNode { struct BinaryTr

2021-05-03 14:57:06 343

原创 二叉树---求树的叶子个数

int TreeLeafSize(BTNode* root){ if (root == NULL) { return 0; } if (root->left == NULL && root->right == NULL) { return 1; } return TreeLeafSize(root->left) + TreeLeafSize(root->right);}

2021-05-03 09:57:08 236

原创 二叉树--求树的高度

实现思想:1.求树高时我们可以利用递归思想来求。而递归主要的思想就是要将大问题化为小问题。2.我们求树高时,可以分别求左右子树的高度然后比较左右子树的高度,返回较大的值。代码实现:int max_val(int a, int b) { return a > b ? a : b; }int BTtreeHeight(BTNode* root) { if (!root) return 0; return max_val(BTtreeHeight(root->left), BTtr

2021-05-03 09:46:15 1728

原创 二叉树---查找值为x的节点

如何查找思路:单边递归查找。具体方法:先对左子树递归查找。如果未找到x,则返回NULL,如果找到x,便返回x所在节点。根据返回值判断是否需要进行右递归查找操作。具体实现BTNode* CreateTreeNode(BTDataType x) { BTNode* newNode = (BTNode*)malloc(sizeof(BTNode)); newNode->left = NULL; newNode->right = NULL; newNode->val = x;

2021-05-02 23:22:26 10869 5

原创 二叉树----层序遍历

1.层序遍历层序遍历:层序遍历即逐层按顺序遍历二叉树的各个节点,故层序遍历又叫广度优先遍历.如图:广度优先遍历即按ABCDEFGH的顺序遍历2.解题思路1.这里我们利用队列先进先出的结构特点,当我们在队列中弹出一个树的节点时,我们便把树的左孩子和右孩子入到队列之中.(如果父节点的左右孩子为空时,我们便可不对其孩子进行入队列操作)2.根据上面描述,我们可以用一个while循环解决入队列与出队列操作,结束条件便是判断队列是否为空.3.代码实现我们用C语言实现时,我们得自己写一个队列的结构,该

2021-05-02 16:36:32 1916 1

原创 C++中 cout 输出double类型的数据

#include<iostream>#include<Windows.h>using namespace std;int main(){ double value = 12.3456789; // 默认精度是6,所以输出为 12.3457 //(默认情况下,精度是指总的有效数字) cout << value << endl; // 把精度修改为4, 输出12.35, 对最后一位四舍五入 // 精度修改后,持续有效,直到精度再次被修

2021-04-26 21:54:31 10621

原创 c语言实现三种稳定排序---插入,冒泡,归并

1.插入排序【1】基本实现:从一个数组的第二个位置起,到最后一个位置结束。让这些位置每一个都进行一遍循环。该循环操作是让从该位置上的元素起,依次与前面的位置元素进行比较,在满足某一条件下进行交换,从而达到排序的效果。【2】时间复杂度:O(N^2)//【排序1】插入排序--排升序--时间复杂度( O(N^2) )void Insert_Sort(int* arr, int n){ for (int i = 1; i < n; i++) { for (int j = i; j &gt.

2021-04-12 23:59:46 921 1

原创 广义表转二叉树

头文件#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<assert.h>#include<string.h>#define TreeDataType char //树内的数据为char,可存放字母//定义一个树结点,用于将广义表中的数据封装成树结点typedef struct Node{ TreeDataType data ; .

2021-04-08 17:01:18 1475 8

原创 二叉搜索树-c语言实现-妙用递归

二叉搜索树1.性质:所有比根节点的小的数据放入左孩子,所有比根节点大的数据放在右孩子处。代码实现:注:前序遍历二叉树[根-左-右]中序遍历二叉树[左-根-右]后序遍历二叉树[左-右-根]typedef struct Node{ int data ; struct Node* lchild ; struct Node* rchild ;}Node;typedef struct BSTree{ Node* root ; int length ;}BSTree;No

2021-04-07 19:43:32 235 2

原创 数组实现链表效果

//局部变量:未初始化内部元素默认为0int Data[10] ; //定义一个数组,存放数据int Next[10] ; //定义一个数组,存放下一个元素的下标//该函数用于实现数组链表的插入void Insert( int index , int p , int val){ Next[p] = Next[index]; //将index 后面的下标赋予 p后面的下标 ,从而达到插入的效果 Next[index] = p; //将index 后面的下标改为p.

2021-03-31 22:47:32 137 2

原创 堆的应用---堆排序

堆排序引言:实现思路:代码实现引言:一个堆的首元素往往是最大值或者最小值,因此我们可以利用这一特性实现对一组数进行排序。须注意的是:大堆可以实现一组数的升序排列,小堆则用来实现一组数的降序排列。实现思路:当我们有一个堆后(这里用小堆为例):我们可将首元素(这里即最小的元素)与最后一个元素交换并让堆的大小减一。(因为我们这里已经把堆中最小的数放在了最后的位置,我们剩下要做的便是对其余的元素排序)。因为父节点的两棵子树任然为小堆,因此对根节点进行向下调整(用向下调整算法),得到一个小堆,第二

2021-03-31 20:13:30 187 1

原创 堆排序 --- 向下调整算法

二叉堆概念:二叉堆是一种特殊的树结构,即一个父节点最多有两个子节点。且一个二叉堆一定是一个完全二叉树,即如果一个父节点有一个右孩子,则其一定有一个左孩子。二叉堆又分为大堆和小堆:(1)大堆:父节点上的数大于子节点上的数(2)小堆:父节点上的数小于子节点上的数代码实现:该段代码实现重点在雨:向下调整算法、构造堆------------------------------------------------------------------------函数申明-------------

2021-03-31 00:41:29 358

原创 LeetCode_26 删除数组中的指定值

题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。代码及思路int removeDuplicates(int* nums, int numsSize){ int prev = 0 ; //定义数组前面的数为prev int next = 1 ; //定义数组后面的数为next if(numsSize <

2021-03-30 18:35:53 123

原创 LeetCode_26 删除有序数组重复项

题目:给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。思路:用快慢指针的方法。让快指针遍历一遍数组,将不重复的数存入慢指针中代码实现int removeDuplicates(int* nums, int numsSize){ int prev = 0 ; //定义数组前面的数为prev int next = 1

2021-03-30 18:21:20 84

原创 LeetCode 225 -- 队列实现栈

题目:请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类:void push(int x) 将元素 x 压入栈顶。int pop() 移除并返回栈顶元素。int top() 返回栈顶元素。boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。注意:你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、si.

2021-03-26 00:39:09 108

原创 LeetCode--20 有效的括号

题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。思路:1.使用语言:c2.实现运用的知识: 栈的后进先出3.大概实现:遍历字符串,让左括号入栈。如遇上右括号,则判断栈顶的数据是否为与之匹配的左括号(1.栈为空则不满足条件;2.括号不匹配也不满足),判断完后,将栈顶的数据做出栈操作。4.遍历完字符串还需判断栈是否为空,不为空则说明存在不匹配的括号。.

2021-03-24 14:13:58 94 1

原创 队列----基础函数功能的实现

一.队列的特点:先进先出(FIFO)数组与链表实现的对比:1.用数组实现时,在数据出队列时需挪动整个数组 不方便2.相较而言,链表实现队列较为简便以下是用单向链表的方式实现队列二.代码运行三.代码实现1.函数声明#define QDataType int //队列组成元素为节点,故定义一个QueueNode的节点类型typedef struct QueueNode{ QDataType _data ; struct QueueNode* _next ;}QueueNode;

2021-03-22 23:34:57 1216 1

原创 栈---基本功能的实现

stack --堆(LIFO)后进先出1.运行贴图2.代码实现#define SDataType int #include<stdio.h>#include<stdlib.h>#include<assert.h>typedef struct Stack{ SDataType _top; // _top表示栈最后一个元素的位置 SDataType* _array; int _capacity;}Stack;//初始化栈void Ini

2021-03-22 16:17:30 156 3

原创 链表---双向循环链表(带头节点)

**双向带头链表相较单向链表:** 逻辑性更强,但实现更容易下面是测试该链表功能的结果的结果 :以下代码分为三部分:1.函数声明:2.函数实现:3.测试部分:注:函数实现内有对函数实现的部分分析.#include<stdio.h>#include<stdlib.h>#include<assert.h>//双向带头节点链表#define ListType int typedef struct List...

2021-03-20 21:09:15 183 3

原创 宏实现---交换一个数二进制的奇偶位

#include<stdio.h>#define SWAP(x) ( ( (x)& 0xaaaaaaaa ) >>1 | (((x)& 0x55555555) <<1) ) //(x)& 0xaaaaaaaa : 0xaaaaaaaa表示的二进制位为:101010.....101010(共三十二位) //其与x相&,奇数位的数不变,偶数位变为0, 右移以为奇数位的数变为偶数位//0x55555555: 二进制:0

2021-03-20 11:58:42 112

原创 C语言--宏实现offsetof函数

#define _CRT_SECURE_NO_WARNINGS//#define 实现函数offsetof//注:offsetof函数作用:计算结构体成员地址的偏移量(相对首元素地址)#include<stdio.h>#define OFFSETOF(StructType,Mem_name) ((int)&(((StructType*)0)->Mem_name))//1.先把0转换成结构体类型的指针,即用0来代表首元素的地址//2.用该指针访问结构体成员,成员的首

2021-03-20 11:22:07 193 1

原创 C语言--动态通讯录(可文件操作)

#include <stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#define Max_name 10#define Max_sex 10#define Max_number 11#define Max_phoList 1000typedef struct PhoneList{ char name[Max_name]; char sex[Max_sex];

2021-03-19 23:42:21 489

原创 联合体

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>/* <<< 1 >>> 联合体 ---> 判断计算机的大小端存储模式 联合体大小计算 1.联合体大小至少是最大成员变量。 2.当最大成员大小不是最大对齐数的整数倍,就要对齐。*/int check_sys1(){ int a = 1 ; char* p = (char*)&a

2021-03-19 14:45:39 60

原创 结构体--位段

#define _CRT_SECURE_NO_WARNINGS/* <<<< 1 >>>> 位段1.位段成员可以是 int unsigned int signed int char 2.位段的空间按照 4字节(int) / 1字节 (char) 开辟3.位段涉及很多不确定因素,位段不跨平台。*///example 1#include <stdio.h>struct S{ char a

2021-03-18 23:49:25 84

原创 单向无头链表

#pragma once#include<stdio.h>#include<stdlib.h>typedef int SLDataType ;typedef struct SListNode{ SLDataType data; struct SListNode* next;}SListNode;//创建一个节点SListNode* BuySListNode(SLDataType x);//打印void PrintSList(SListNode* ph

2021-03-18 23:38:54 63

原创 c语言实现qsort

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int cmp_by_int(void*start, void* end){ return *((int*)start) - *((int*)end) ;}void swap(char* e1, char* e2, int width)//对需要排序的部分一个字节一个字节进行交换{ char tmp; while (width--)//width代表一个需交换元素的字节大小,即需

2021-03-18 23:19:34 94

原创 动态内存管理---free.malloc.realloc

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>#include<stdlib.h> //动态内存管理 -- malloc/free 函数int main(){ int* p = (int*)malloc(sizeof(int)* 10); //申请内存失败 if (p == NULL) { //打印错误信息 printf("%s\n",strerror(

2021-03-18 22:59:56 108

原创 c语言实现通讯录

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#include<stdlib.h>#include<string.h>#define Max_name 10#define Max_sex 10#define Max_number 11#define Max_phoList 1000typedef struct PhoneList{ char name[Max_name]; char sex[Ma

2021-03-18 22:56:19 85

原创 顺序表

------------------------------------------------- #pragma oncetypedef int SLDataType; // 可以方便 进行更改 顺序表中 数据存放的类型#include <stdio.h>#include<stdlib.h>#include<assert.h>//用结构体定义一个顺序表 ----> 一个结构体变量 就可 表示一个顺序表typedef

2021-03-18 22:34:03 65

原创 动态内存管理---几道易出错的代码

#define _CRT_SECURE_NO_WARNINGS// 动态内存管理出现的几道 错误事例 <<1>>#include<stdio.h>#include<stdlib.h>#include<string.h>void* GetMemory(char** p){ *p = (char*)malloc(20);}int main(){ char* str = NULL; GetMemory(&s

2021-03-18 22:29:58 146

原创 柔性数组

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>/*柔性数组:(1)定义:在结构体中,若最后一个元素是不规定大小的数组(该结构体元素大于1),该数组长度是弹性可变的*///example ---柔性数组typedef struct S1{ int n; int arr[];}S1; // sizeof(S)所求的结构体大小未包含柔性数组的大小//example ---非

2021-03-18 22:22:30 57

原创 C语言文件操作--fputc.fpetc.fgets.fputs.fprintf.fscanf.sscanf.sprintf.fwrite.fread

#define _CRT_SECURE_NO_WARNINGS//文件操作// c语言默认的三个输出流 : stdin标准输入流(键盘) stdout标准输出流(屏幕)stderr标准错误流(屏幕) // 注: 1.以下pf 可换成任意输入输出流// 2.put函数---与文件操作 "w"模式匹配// get函数---与文件操作 "r"模式匹配#include<stdio.h>#include<stdlib.h>#include

2021-03-18 00:35:08 180

原创 C语言文件操作---fseek.ftell.fread.rewind

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#include<errno.h>#include<string.h>//文件操作// fread.fseek.ftell.rewindtypedef struct S{ char name[20]; int age ;}S;void text_fputs(FILE* pf){ char* str

2021-03-18 00:13:20 148

原创 利用联合体判断计算机的大小端

代码实现int check_sys(){ union { char c; int i ; }u; u.i = 1; return u.c ; // 小端返回 1 ,大端返回 0 ;int main(){ int ret1 = check_sys1(); int ret2 = check_sys2(); if (ret1 == 1) printf("sys1 :小端存储\n"); else printf("sys1 :大端存储\n") ; return 0;}

2021-03-08 19:09:20 459

原创 内存函数 -- memcpy 实现

memcpy函数的作用memmove:用于拷贝一块内存块中的内容,并将这些内容拷贝到另一内存块中。其特点是对任意字节进行逐字节拷贝。my_memcpy的实现:

2021-03-01 17:17:01 96

原创 用一个程序弄清你的计算机是大端还是小端存储

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、什么是大端(小端)存储?二、具体实现方法一、什么是大端(小端)存储?(1)大端存储:数据的高字节放在内存的底地址处,低字节放在高地址处;(2)小端存储:数据的高字节放在内存的高地址处,低字节放在低地址处。二、具体实现方法#include <stdio.h>//封装check_sys函数判断计算机的大小端int check_sys1() //方法一{ int a = 1 ;// 1的二进制转化成

2021-02-03 16:25:57 514 1

空空如也

空空如也

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

TA关注的人

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