自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 问答 (1)
  • 收藏
  • 关注

原创 LeetCode第二题----俩数相加

这种题目先读懂,不要被逆序混淆视听先根据图来看,l1先取2,l2先取5,输出的是2+5=7,第二步 4 + 6=10,进1,为0第三步3+4=7,加一为8.然后顺序输出 7 0 8这样一看就是一个单链表的尾插,将俩个链表遍历输出相加,然后尾插到一个新的链表中,最后返回新链表。方法知道了,就要考虑情况主要分2种一.l1和l2长度相同在长度相同中又分1.最后一组数据有进位2.最后一组数据没有进位二.l1和l2长度不同在长度不同中又分1.l1长...

2021-12-11 14:56:57 3689

原创 LeetCode训练题----环形链表

使用快慢指针,追与相遇来解决在存在环的情况下start指针先进入环,在slow指针进入环的时候start指针开始追赶,存在条件使得它们相遇(俩个指针的步数相差1)因为只有在相差1的情况下,才能保证绝对相遇证明如下在slow指针进入环时,设这时俩指针相隔N每次追赶时,俩指针距离减少1N-1N-2.....0(相遇)/** * Definition for singly-linked list. * struct ListNode { * ...

2021-12-09 18:33:47 139

原创 LeetCode训练题---链表的中间节点

这里要注意的时当节点个数为偶数时输出的时靠后的中间节点这个我们用快慢指针来解决定义俩个指针,start和endstart每次走一步end每次走俩步当节点个数为奇数时end=NULL结束,start为要返回的值当节点个数为偶数时end->next=NULL结束,start为要返回的值/** * Definition for singly-linked list. * struct ListNode { * int val; * struct L...

2021-12-09 16:03:55 328

原创 LeetCode训练题--反转链表

这里用俩种方法解决第一种方法,指针反转法将反转成定义三个指针 n1=NULL,n2指向第一个节点,n3指向第三个节点.反转的时候将n2指向n1,n2赋给n1,n3赋给n2,n3往后挪终止条件为n2==NULL返回n1注意当第二次的时候n3就已经为NULL了,第三次的时候n3已经为野指针。/** * Definition for singly-linked list. * struct ListNode { ...

2021-12-09 15:49:26 346

原创 双向带头循环链表

双向带头循环链表的优势,时间复杂度为O(1).方便这里实现常见的几个接口函数头删,尾删,头插,尾插,pos节点前插入,删除pos节点首先定义一个双向链表,用结构体定义typedef int LTDataType;typedef struct ListNode{ struct ListNode* prev; struct ListNode* next; LTDataType data;}ListNode;初始化函数//初始化ListNode* ListInit()

2021-12-07 15:23:48 804

原创 单向链表的一些接口函数

链表相对于书虚表而言,更加利用内存,并且在内存上不是连续的。下面来写一些简单的接口函数先定义一个链表//重定义typedef int DataType;struct SListNode{ DataType data; struct SListNode* next;};//重定义typedef struct SListNode SLTNode;链表的输出函数//输出void SListPrint(SLTNode* ps){ SLTNode* cur = ps;

2021-12-04 21:39:29 449

原创 简单动态顺序表

简单的动态顺序表需实现的接口函数有增删改查;一个简单的顺序表就是数组动态的顺序表较静态顺序表而言,更加的节省空间,不够加扩容,不会造成过多的浪费。最后需释放扩容的空间删除又包含头删,尾删,任意位置删除。增加又包含头插,尾插,任意位置插入。

2021-12-03 16:39:05 459

原创 实现反转数组

要求时间复杂度为O(1)翻转三次,K=3例将[0,1,2,3,4,5,6,7,8]翻转成[6,7,8,0,1,2,3,4,5]先将下标为N-K到N-1的数翻转,下标为0到N-K-1的数翻转再将整个数组翻转

2021-12-01 16:40:52 173

原创 消失的数字

找出0--N数字中消失的数字,程序时间复杂度为O(n).

2021-12-01 16:24:32 549

原创 学生信息管理系统

一个学生信息管理系统,最少要有以下功能,增删改查,排序,保存,显示功能。

2021-11-23 20:41:13 673

原创 带副作用的宏参数

如果一个宏里面的参数有副作用,会导致宏出现错误例如#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#define MAX(X,Y) ((X)>(Y)?(X):(Y))int main(){ int a = 1; int b = 2; int max = MAX(a++, b++); printf("%d\n", max); //3 printf("%d\n", a); //2 printf("%d\

2021-11-18 19:16:47 824

原创 关于预定义#define的用法

#define可以定义标识符#define MAX 100#define可以定义宏#define ADD(X,Y) ((X)+(Y))//这里最好要用括号int main(){ int a = ADD(3, 5); //a=3+5 printf("%d", a); return 0;}不用括号可能会出现以下问题#define ADD(X,Y) X+Yint main(){ int a = 10*ADD(3, 5); //a=10*3+5=35 pr

2021-11-17 15:44:19 331

原创 常见预定义符号

——FILE——代码所在位置——LINE——代码所在行号——DATE——日期——TIME——时间int main(){ //以写的形式打开text.txt,若没有文件,则新建一个 FILE* fp = fopen("text.txt", "w"); if (fp == NULL) { //打印 错误原因 perror("打开失败"); } //将格式化输出到fp中 fprintf(fp, "%s %d %s %s", __FILE__, __LINE_...

2021-11-17 15:24:43 124

原创 文件操作的一些内容

关闭文件fclose(fp);fp=NULL;打开文件FILE* fp=fopen("xxx.xxx","xx");第一个参数为设置的文件的类型第二个参数有以下操作 作用 文件不存在 "w"(只写) 为了输出数据,打开一个文本文件 建立一个新的文件 "r"(只读) 为了输出数据打开一个已经存在的文件 出错 “a”(追加) 向文本文件尾添加数据 出错 “rb”(只读) 为了输入数据,打开一个二进制文件 出错

2021-11-16 17:29:01 109

原创 sprintf()函数和sscanf()函数的区别

sprintf()是把格式化数据输出成(存储到)字符串。sscanf()是从字符串中读取格式化的数据。下面用个例子来说明:先定义一个结构体struct S{ int age; float f; char arr[10];};运用sprintf()函数int main(){ struct S s = { 10, 5.236f, "abcdefg" }; char buf[100] = { 0 }; //将格式化的数据转换成字符串存储到buf中 sprintf(b

2021-11-16 14:55:30 1396

原创 实现三子棋

三子棋也就是小时候常玩的井子棋,实现这个功能这次用的是纯数组知识,加上时间戳,随机数。实现程序的步骤1.先明白程序所需功能 (三子连成一线即赢)2.绘制一个棋盘3.初始化棋盘4.打印棋盘4.玩家下棋5.电脑下棋(这里就运用到随机数的知识)6.判断状态,是接着下,还是玩家赢、电脑赢、平局test.c文件#define _CRT_SECURE_NO_WARNINGS#include"game.h"void menu();void test();int m

2021-11-14 15:50:48 60

原创 用malloc()函数分配动态内存遇到的问题

用malloc()函数开辟空间常见的问题就是内存泄漏。举个例子#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<string.h>void get(char* p){ p = (char*)malloc(20);}void test(){ char* str = NULL; get(str); strcpy(str, "hello word!"); printf(str);}int

2021-11-13 15:41:14 1024

原创 青蛙跳台阶问题

一只青蛙每次可跳一阶或俩阶台阶,问跳到N阶台阶有多少种方法/* n=1,num=1; n=2,num==2; n=3,num=n(1)+n(2)=3; n=4,num=n(2)+n(3)=5 ...................*/可以看出是一个递归问题#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int qw(int n);int main(){ int n = 0; s...

2021-11-13 12:14:58 210

原创 实现一个简单的通讯录功能

最近在写一个通讯录,实现的功能有增、删、改、查、排序、显示。这让我想起了大二的实训作业---写一个学生管理系统,俩个的功能差不多。但是本人大二是个铁混子,这次也让我真正的来完成了。下面看代码main.c文件#define _CRT_SECURE_NO_WARNINGS 1#include"mail_list.h"void menu(){ printf("***1.增加***********2.删除***\n"); printf("***3.查找***********4.修改***\n

2021-11-11 16:47:51 551

原创 如何判断计算机大小端

这里先介绍一下什么是大小端大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中对于int a = 0x11223344内存 【】 【】 【】 【】 【】 【】是由低到高的存放方式为 【11】【22】【 33】 【44】 就是小端存放方式为 【44】【33】【 22】 【11】就是大端现在我们判断在计算机中内存的存储到底是大端还是小端#defi.

2021-11-11 13:25:32 778 2

原创 猜数字游戏

运用随机数来设计一个简单的猜数字游戏#define _CRT_SECURE_NO_WARNINGS #include<stdio.h>#include<stdlib.h>#include<time.h>void menu(){ printf("**********************\n"); printf("**1.玩游戏 0.退出**\n"); printf("**********************\n");}void ga

2021-11-10 18:26:17 2261

原创 结构体的内存大小

结构体内存对齐 第一个成员在与结构体变量偏移量为0的地址处 其他成员变量要对其到某个数字(对其数)的整数倍的地址处; 对齐数=编译器默认的额一个对齐数与该成员大小的较小值(VS默认是8) 结构体总大小为最大对齐数(每个成员都有一个对齐数)的整数倍 嵌套结构体,就是将结构体放到自己最大对齐数倍数的偏移量那,嵌套结合体总大小为最大对齐数(含嵌套结构体的对齐数)的整数倍 struct Stu s1{ char a; int b; char c;};

2021-11-10 16:09:04 208

原创 结构体的定义与初始化

结构体的定义结构体//声明一个结构体struct Stu{ char name[20]; char phone[20]; char sex; int age;}s1;struct Stu s2;int main(){ //声明一个结构体变量 struct Stu s3; return 0;}//这里s1,s2都是全局变量,s3是局部变量结构体的初始化以及调用//声明一个结构体struct Stu{ char nam.

2021-11-10 15:54:45 104

原创 杨氏矩阵如何查找数字

杨氏矩阵是一个从上到下,从左到右递增的矩阵。对于从杨氏矩阵查找数字又俩种方法,一种是从右上角开始,一种是从左下角开始。本次以右上角为例,这是一个3*3的矩阵1 2 32 3 43 4 5从右上角A值开始查询好处是,右上角对于整列而言是最小的,对于整行而言是最大的。(从左下角开始页是一样,对于整列而言是最大的,对于整行而言是最小的。)这样当所查K值大于A值时整行可以去掉,小于A值时整列可以去掉,这样减少循环次数。#include<stdio.h>//杨氏矩.

2021-11-09 14:15:58 71

原创 实现一个简单的扫雷功能

这是我跟着学习视频完成的第一个小游戏,运用到的知识不多都是数组相关的知识,重要的是思路,在设计的时候要先绘制出大概的框图,要知道游戏的根本,这样会让你写程序的时候更加方便。下面看代码:test.c#define _CRT_SECURE_NO_WARNINGS#include"game.h"void test();void menu();void game();int main(){ test(); return 0;}void menu(){ printf("

2021-11-08 12:34:48 2783

原创 qsort()函数

//头文件#include<stdlib.h>void qsort( void* base, size_t nmemb, size_t size, int (*compar)(const void *,const void *) );qsort()函数是对数组进行排序各个参数(数组起始的地址,该数组的元素个数,数组中每个元素的大小(字节数),比较方法)这里对几种类型的排序做#define _crt_secure_n...

2021-11-04 17:02:10 63

原创 函数指针数组的用途---简易计算器功能实现

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>void menu(){ printf("************************\n"); printf("***1.加 2.减***\n"); printf("***3.乘 4.除***\n"); printf("*** 0.exit ***\n"); printf("************************.

2021-11-04 11:50:16 89

原创 如何定义一个数组指针

数组指针是指向数组的指针----存放数组的地址对于int* arr1[10]={0};要求正确书写数组指针arr2arr2=&arr1;//1.存放的是数组的地址,故(*arr2)=&arr1;//使得arr2是一个指针//2.数组有10个元素 故(*arr2)[10]=&arr1;//3.定义类型,arr1的类型是int*,故int* (*arr2)[10]=&arr1;...

2021-11-03 19:26:00 510

原创 对于数组指针和指针数组的区分

int arr[5];//arr是一个包含5个元素的整型数组int* arr1[5]; //指针数组//arr1是一个数组,包含5个元素,元素类型为int*int (*arr2)[5]; //数组指针//arr2是一个指针,指向了一个包含了5个元素的数组,元素类型是intint (*arr3[5])[5];//先看()里的* arr3[5],因为[]优先级比*高所以arr3是一个数组有五个元素//再看元素 剩下的int (*) [5]这是一个数组指针,指向一个含有5个int 类型元素.

2021-11-03 19:17:32 56

原创 指针的解引用以及数组指针的使用

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>// 数组指针做参数,*p接收的是arr数组首元素的地址void print(int (*p)[5], int x, int y){ int i = 0; for (i = 0; i < x; i++) { int j = 0; for (j = 0; j < y; j++) { //*(p+i)将arr数组中首元素地址+i 并取值, .

2021-11-03 19:02:02 873

原创 浮点型在内存中的存储

//对于float在IEE754中存储方式 float a = 5.5; //二进制 101.1 //(-1)*0 * 1.011 * 2^2 //(-1)*S * M * 2^E //S占一位,E占8位(要加上127),M占23位(小数点后的二进制数) 对于float 32位 // S=0,M=1.011,E=2 //E=E+127 //E 10000001 //存储在内存中 //0 10000001 01100000000000000000000 /.

2021-11-02 16:51:26 38

原创 strcpy()函数实现

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<assert.h>char* str_strcpy(char* arr1, const char* arr2){ //定义一个中间指针变量存放arr1 char* tmp = arr1; //保证指针有效性 assert(*arr1 != NULL); assert(*arr2 != NULL); //将arr2指向的字符串赋值到arr1指定的空间,.

2021-11-01 22:10:01 60

原创 strlen()函数的实现

strlen()函数的实现#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<assert.h>int str_strlen(const char* p){ int count = 0; //保证指针的有效性 assert(*p != NULL); while (*p) { p++; count++; } return count;}int main(){ char arr[10

2021-11-01 21:51:54 39

原创 输入俩个int型整数,输出其二进制位有多少位不同

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>//无符号位是防止负数从而导致结果出错//因为计算机中存储的二进制为补码//例如-1: 10000000000000000000000000000001,原码// 11111111111111111111111111111110,反码 // 11111111111111111111111111111111,补码(计算机所存储的)int bit(un.

2021-11-01 16:06:58 131

原创 指针的解引用

指针的类型决定了对指针解引用的权限(能操作几个字节)int* 4个字节char* 1个字节double* 8个字节float* 4个字节short* 2个字节指针解引用在内存的作用int 型改变前的内存分配改变后的内存分配char型改变前的内存分配改变后的内存分配解引用的使用以int型和char型对比为例#include<stdio.h>int main(){ int arr[10] = { 0 }; int* p1 ..

2021-10-31 13:46:15 1554 2

原创 隐式转换--整型提升

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>int main(){ char a = 3; //00000011---a //整型提升 //00000000000000000000000000000011 char b = 127; //01111111---b //整型提升 //00000000000000000000000001111111 char c = a + b; //a,b相加 //00000000.

2021-10-31 12:39:30 49

原创 Hanoi问题

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>void hanoi(char x, char y, char z, int n);void move(char a, char b);int main(){ int n = 0; //输入块数 scanf("%d", &n); hanoi('a', 'b', 'c', n); return 0;}void hanoi(char x, char y, char .

2021-10-29 19:40:02 88

原创 冒泡排序优化方案

#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>void sort(int a[], int sz);int main(){ int arr[] = { 9,8,7,6,5,4,3,2,1,0 }; int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); sort(arr, sz); for (i = 0; i < sz; i++) { printf("%d ", arr[.

2021-10-27 20:49:21 39

原创 printf()函数返回值

printf("%d",printf("%d",printf("%d",789)));输出结果为78931printf()函数返回的返回的字符的个数第一个printf("%d",789);输出789第二个printf("%d",printf("%d",789));_由于789是三个字符所以返回3,故为7893第三个printf(printf("%d",printf("%d",789))); 由于3是一个字符所以返回1,故为7891...

2021-10-27 16:57:18 229

空空如也

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

TA关注的人

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