![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
文章平均质量分 54
ld0524
这个作者很懒,什么都没留下…
展开
-
8种常见的排序算法-----你值得掌握(很细,很全)
一、排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。 例如:内部排序:数据元素全部放在内存中的排序。 外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存原创 2022-01-21 11:11:44 · 3513 阅读 · 2 评论 -
堆的创建以及堆的基本操作
一、堆的基本概念概念:将元素储存在一维数组中--->形成一颗完全二叉树 条件限制:每个节点比其孩子节点都大(小)--->大(小)堆大堆:二、堆的特性特性:堆顶元素是所有元素中最大(小)的 任意节点都比其孩子节点大(小) 从堆顶到所有叶子路径中是降序(升序)三、堆的相关操作1.创建堆头文件:#pragma once#include<stdio.h>#include&...原创 2021-12-06 17:43:13 · 2993 阅读 · 0 评论 -
栈以及队列的实现与基本操作
目录一、栈1.栈的基本概念2.如何实现一个栈1.>用数组实现一个可以动态增长的栈(建议)2.>栈的链式存储3.栈的基本操作1.>栈的创建2.>栈的初始化3.>入栈操作4.>出栈操作5.>获取栈顶元素6.>栈空的判断7.>栈的销毁二、队列1.队列的基本概念2.如何实现一个基本队列1.>顺序队的实现2.>链队的实现3.>循环队列的实现3.队列的基本操作(..原创 2021-12-02 16:14:56 · 1210 阅读 · 2 评论 -
如何用两个栈实现一个队列?
首先我们需要先实现栈的一些基本操作(创建,销毁,入栈,出栈,获取栈顶元素,栈的判空)具体代码如下:typedef char STDataType;typedef struct Stack{ STDataType* _a; int _top; // 栈顶 int _capacity; // 容量 }Stack;// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0 int StackEmpty(Stack* ps){ assert(ps); return 0 == p原创 2021-11-29 16:44:04 · 220 阅读 · 1 评论 -
实现一个可以动态增长的栈以及栈的基本操作
头文件:#pragma once#include<stdio.h>#include<windows.h>#include<assert.h>#include<malloc.h>// 支持动态增长的栈typedef int STDataType;typedef struct Stack{ STDataType* _a; int _top; // 栈顶 int _capacity; // 容量 }Stack;// 初始化栈原创 2021-11-29 16:24:58 · 121 阅读 · 0 评论 -
c语言链表实现简单的约瑟夫问题
//约瑟夫问题#include<stdio.h>#include<windows.h>#pragma warning(disable:4996)typedef struct node{ int number; struct node*next;}person;person* initlist(int n){//初始化,先给每个节点赋值 person*head = (person*)malloc(sizeof(person)); head->number.原创 2021-11-18 15:21:15 · 865 阅读 · 0 评论 -
教你用C语言实现简单的手机通讯录
通讯录中包含的内容:我们用结构体实现typedef struct person{ char name[32]; char sex[8]; int age; int number[16]; char adress[64];}person_t;typedef struct contact{//通讯录大小,保存了多少联系人以及联系人的信息(柔性数组) int cap; int size; person_t persons[0];}contact_t;通讯录首先要有一个菜单:原创 2021-11-13 21:43:00 · 9779 阅读 · 1 评论 -
C语言的这个关键字你真的认识吗?
static这个关键字相信大家都是知道的,那么你真的很懂他吗?首先我想先问一个问题:为什么要有头文件?单纯的使用源文件,组织项目结构的时候,项目越大越复杂的时候,维护成本会变得越来越高。.h :头文件,组织项目结构的时候,减少大型项目的维护成本。那么C语言的头文件都包含哪些内容呢?1.c的头文件2.所有变量的声明3.所有函数的声明4.#define,类型typedef,struct当我们写头文件的时候需要注意一个问题:头文件被重复包含解决方案:#pragma warn原创 2021-11-13 18:06:49 · 748 阅读 · 0 评论 -
教你用c语言完成找单身狗问题
一组数据中只有两个数据单独出现,其余数据都是成对出现,找出 这些数据中单独的两个数并输出。#include<stdio.h>#include<assert.h>#include<windows.h>#pragma warning(disable:4996)void findnum(int num[],int len,int *xp,int *yp){ assert(xp); assert(yp); *xp = 0; *yp = 0; ////st原创 2021-11-09 21:34:37 · 992 阅读 · 1 评论 -
动态内存管理(堆区)
为什么存在动态内存管理1.可以申请大块内存,进行较为大型的应用2.可以在程序运行期间进行申请,可以更灵活的使用内存空间。(申请空间用malloc()函数,必须是程序运行起来才能调用,编译的过程早就过了)如何进行空间管理?通过malloc函数申请空间和使用,用free函数释放空间常见细节:1.整体申请,整体释放。2.如果申请内存不归还,会造成内存泄漏。内存泄漏:一种严重的问题,会造成可用内存越来越少。 进程退出了,内存泄漏问题就不在...原创 2021-11-05 21:10:00 · 355 阅读 · 0 评论 -
常用字符串操作库函数的模拟实现
目录1.模拟实现strlen2.模拟实现strcpy3.模拟实现strcat4.模拟实现strstr5.模拟实现strcmp6.模拟实现memcpy7.模拟实现memmove1.模拟实现strlen2.模拟实现strcpy3.模拟实现strcat4.模拟实现strstr5.模拟实现strcmp6.模拟实现memcpy7.模拟实现memmove...原创 2021-11-01 15:47:46 · 84 阅读 · 0 评论 -
结构体、枚举、联合
结构体为什么会存在struct?计算机是为了解决人的问题,人认识自然世界的方式是通过“属性”认识的。任何事物抽象出的属性集合,都可以用来表示一类事物,及类型,这个工作中,c中,struct。结构体类型的声明struct tag{member_list;}variable_list;特殊的声明(在声明结构体的时候,可以有不完全的声明)比如://匿名结构体类型struct{ int a; char b; float c;}x;struct{原创 2021-10-31 08:47:39 · 105 阅读 · 0 评论 -
字符函数和字符串函数
目录前言:1.求字符串长度strlen2.长度不受限制的字符串函数1>strcpy(字符串拷贝)2>strcat(字符串链接)3>strcmp(字符串比较函数)3.长度受限制的字符串介绍1>strncpy2>strncat3>strncmp4.字符串查找1>strstr(子串查找)2>strtok(分割字符串)5.错误信息报告strerror6.字符操作7.内存操作函数1>原创 2021-11-01 15:48:38 · 133 阅读 · 1 评论 -
深度剖析数据在内存中的存储——浮点数的存储
一、十进制小数转换为二进制小数十进制数的整数位是二进制数的整数位,十进制数的小数位是二进制数的小数位。两部分分开转换。整数部分 除以2取余,逆序排列。小数部分 乘 2 取整,顺序排列。注意:为什么原理如上?首先有一点需要明白,十进制和二进制比较的基准点在哪里?也就是说,哪个数在十进制和二进制里面,都是代表相同的大小,必须找到这个基准点,然后才好讨论。很明显这个基准点是个位数1,十进制中的1和二进制中的1都是表示相同的大小的值。那么以1这个基准点为基础,整数部分,十进制是逢十进一,二进原创 2021-10-15 16:31:32 · 120 阅读 · 0 评论 -
深度剖析数据在内存中的存储-整形的存储
重点知识:一、数据类型的详细介绍。二、整形在内存中的存储。三、大小端字节序介绍及判断。内容:一、数据类型的详细介绍。1.数据类型的介绍:内置类型(char/short/int/long/long long/float/double)另外C语言没有字符串类型。类型的意义:(1)使用这个类型开辟空间的大小(大小决定了使用的范围)(2)如何看待内存空间的视角(给程序员看的)。注意:数据的存入和目标变量没有关系,目标变量只提供空间。2.类型的基本归类:整形+浮原创 2021-10-08 16:12:14 · 107 阅读 · 0 评论 -
小游戏——三子棋
建立棋盘(棋盘只用中间的10*10部分)static void InitBoard(char board[][COL], int row, int col){ for (int i = 0; i < row; i++){ for (int j = 0; j < col; j++){ board[i][j] = INIT; } }}static void ShowBoard(char board[][COL], int row, int col)...原创 2021-05-31 17:49:29 · 85 阅读 · 4 评论 -
数组(2)—二维数组
一.二维数组在内存中的存储二.数组作为函数传参(数组传参发生降维,降维成指针。数组名做右值代表首元素的地址)数组降维问题:为什么?减少数组传参时的成本(时间和空间)问题。是什么?降维成了什么?数组降维降维成指向其内部元素类型的指针。例如:二维数组降维成数组指针。三.数组名在绝大多数情况下代表首元素的地址,除了两种情况代表这个数组1.sizeof中单独出现。2.&数组名四.int(*arr)[10]数组指针是指针; int*arr[10]指针数..原创 2021-05-29 23:40:40 · 99 阅读 · 0 评论 -
数组(1)—(一维数组)
数组(1)—(一维数组)1.数组的创建(数组是一类相同元素的集合)注意:数组创建时[]中药给一个常量才可以,不能使用变量。2.数组的初始化数组的初始化是指,在创建数组的同时要给数组的内容一些合理初始值(初始化)。数组在创建的时候如果不指定数组的确定的大小就得初始化。数组中元素个数根据初始化的内容来确定,但是对于下面的代码药区分,内存中如何分配。char arr[] = "abc";//带'/0'char arr[3] = "abc";//不带'/0'用“ ”引起来的字符串不用数.原创 2021-05-29 00:39:12 · 131 阅读 · 0 评论 -
用二分法实现一个猜数字小游戏
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>#include <windows.h>void Guess(){ //1. 随机数 //2. srand((unsigned long)time(NULL)); //种随机数种子! i...原创 2021-05-19 22:56:32 · 774 阅读 · 4 评论 -
我眼里的指针—-初识指针
与指针相关的一些知识—内存:内存是电脑特别重要的存储器,计算机中所有的程序的运行都是在内存中进行的。所以为了有效的使用内存,就把内存划分成一个个小的内存单元,每个内存单元的大小是一个字节。为了能够有效的访问到内存的每个单元,就给内存单元进行了编号,这些编号被称为该内存单元的地址。为何存在指针呢??为了提高效率,快速标识与定位。指针是什么??指针是地址。指针变量是变量(变量需要开辟空间,空间中存放地址)。另外指针和地址不做明显的区分。怎么办?指针有左值和右值。1.左值(空间)就原创 2021-05-14 23:28:21 · 101 阅读 · 3 评论