c语言
文章平均质量分 63
LLLLLLLLLLLLLLL.
这个作者很懒,什么都没留下…
展开
-
交换变量a ,b值的三种方法
a=a^b;//比如:a=1010 b=a^b;// b=1101 a=a^b;// a^b=0111原创 2017-11-04 13:51:37 · 5260 阅读 · 0 评论 -
数据结构—栈的实现(顺序表)
数据结构中的栈有“后进先出”的特点,意思是最后被存进栈中的数据,总是最早被取走一个栈只有初始化,销毁,入栈,出栈和取栈顶元素,这些限制往往使在操作数据时更安全,代码容易实现,出现BUG的机会就很少上图中,栈中有3个元素,栈顶元素是data3,如果是入栈操作则data4放入栈顶,此时栈中有四个元素,栈顶元素是data4,如果出栈,则data4被取出,栈顶元素变为data3,具体实现代码如下:头文件(...原创 2018-04-11 09:27:57 · 319 阅读 · 0 评论 -
Linux下打印彩色进度条
代码如下:#include<stdio.h>#include<stdlib.h>int main(){ char jdt[103] = " "; int i = 0; int j = 0; int flag = 0; char arr[4] = {'+','x'}; jdt[0] = '['; jdt[102] ...原创 2018-03-27 20:44:59 · 231 阅读 · 0 评论 -
最小栈
最小栈:有入栈,出栈,取栈顶元素,取出栈内的最小值的时间复杂度均为O(1);有两种实现方式:第一种:使用一个栈没入栈一个元素,都再次把最小值插入,所以每次入栈,其实要入两个元素,栈顶永远是最小值,取栈内最小值就是取栈顶元素,将9725入栈,出栈,取栈顶元素如下图:入栈过程:出栈:取栈顶元素:代码如下:头文件MinStack1.h#pragma once#define MinStackMaxSi...原创 2018-04-15 17:09:52 · 407 阅读 · 0 评论 -
数据结构—链表
实现链表的各种增删查改等操作,并附带一些题目:头文件(c文件中所要实现的内容):typedef char LinkType; typedef struct LinkNode { LinkType data; struct LinkNode* next; } LinkNode; /** * @brief 初始化链表 * * @param head */ void LinkLi...原创 2018-04-03 00:00:51 · 168 阅读 · 0 评论 -
数据结构—顺序表
顺序表,地址空间上连续的一段内存,本次用数组实现顺序表头文件:test.h#pragma once #define SeqListMaxSize 1000 //数组最大容量typedef char SeqType; //顺序表的元素类型typedef struct SeqList { SeqType data[SeqListMaxSize]; size_t siz...原创 2018-05-01 20:40:15 · 268 阅读 · 0 评论 -
双向链表实现
双向链表:对比单向链表,双向链表中,一个结点不仅知道他的后继,还知道他的前驱,这就使得双向链表在操作上比单项链表更为简单,效率更高注:头结点的data无任何意义,所以填0即可空的双向链表(head 的 prev 和 next 都指向头结点)非空双向链表(结构如下图所示)头文件 DLinkList.h#pragma oncetypedef char DLinkType;typedef st...原创 2018-04-08 23:17:34 · 116 阅读 · 0 评论 -
fopen与fclose详解
fopen()打开一个文件函数原型:FILE *fopen(const char *path, const char *mode);path字符串是一个文件名mode是打开文件的方式具体有如下几种方式:r 以只读方式打开文件,该文件必须存在。r+ 以可读写方式打开文件,该文件必须存在。rb+ 读写打开一个二进制文件,允许读数据。rw+ 读写打开一个文本文件,允许读和写。w 打开只写文件,若文件存在...原创 2018-03-29 23:43:24 · 2470 阅读 · 0 评论 -
fread()和fwrite()详解
fread()从文件中读取数据函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);ptr:指向保存结果的指针;size:每个数据类型的大小;nmemb:数据的个数;stream:文件指针函数返回读取数据的个数。建立test.txt文件,输入内容编写代码(只读方式 r 打开)运行结果(每一行都有一个\n,所以一行...原创 2018-03-29 23:21:48 · 772 阅读 · 0 评论 -
数据结构—队列的实现(顺序表)
数据结构中的队列有“先进先出”的特点,意思是最先被存进队列中的数据,总是最先被取走一个队列只有初始化,销毁,入队列,出队列和取队首元素,这些限制往往使在操作数据时更安全,代码容易实现,出现BUG的机会就很少上图队列,如过进行了多次入队列和出队列,就会是head之前的空间浪费,如下图为了避免这种浪费空间的测操作,当每次head 和 tail 只要到达最后一个元素,操作完成就让他们回到对列的最前面,即...原创 2018-04-11 09:58:57 · 409 阅读 · 0 评论 -
C语言实现通讯录(文件版本)
通讯录功能简介:添加一个联系人删除一个联系人查询指定联系人信息修改指定联系人信息显示所有联系人信息清空所有联系人信息所有联系人按名字排序头文件hest.h#pragma once#define NAME_MAX 32 //名字最大长度#define SEX_MAX 4 //性别最大长度 #define TEL_MAX 12 //电话号码最大长度#define NODE...原创 2018-04-05 11:18:33 · 2294 阅读 · 3 评论 -
数据结构—hash表
哈希表,是根据键值对(Key --- value)进行访问的数据结构。也就是说,它通过把key值映射到表中一个位置来访问记录,以加快查找的速度。给定表ht,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。总结上面的所说: 若在Hash表中存放数据的是一个结构体...原创 2018-06-23 13:54:29 · 626 阅读 · 0 评论 -
函数指针详解
函数指针和定义函数指针,顾明思议,就是指向函数的指针,原创 2018-05-24 16:53:56 · 506 阅读 · 0 评论 -
数据结构—堆
堆的定义:堆是一个完全二叉树 堆有两种, 一种叫小堆(小根堆, 最小堆), 一种叫大堆(大根堆, 最大堆). 以小堆为例, 这个树的根节点是这个树中的最小的元素,对于任意一个子树来说, 子树的根节点, 小于左右孩子节点的值. 以大堆为例, 这个树的根节点是这个树种的最大元素,对于任意一个子树来说, 子树的根节点, 大于左右孩子节点的值. 头文件 heap.h#pragma once #inclu...原创 2018-06-03 16:10:16 · 208 阅读 · 0 评论 -
共享栈(一个数组实现两个栈)
原理:想要一个数组实现两个栈,那么就必须一个栈的栈顶从数组下标为0处开始,另一个栈从数组额最大下标处开始,两个栈相对而生如下图所示:如何判断栈满?当两个栈顶标记重合时,表示共享栈已经满了代码如下:头文件ShareStack.h#pragma once#include<stdio.h>#include<stdlib.h>typedef char StackType;...原创 2018-04-26 20:54:23 · 10585 阅读 · 0 评论 -
判定字符串是否按照出栈顺序
判断一个字符串是否可以通过另一个字符串通过栈变换得到假设:源字符串:src 目标字符串:dst判断规则:src与dst的长度必须相等才能进行变换,否则不能变换的到首先定义两个指针p_src和p_dst分别指向src和dst的第一个字符先让p_src对应的元素入栈并进行p_src++,然后取栈顶元素与p_dst对应的元素相比较如果相等,p_dst++,并且栈顶元素出栈如果不相等,在p_src !=...原创 2018-04-26 20:38:40 · 457 阅读 · 0 评论 -
两个队列实现一个栈
原理:如果组成的栈中没元素,那么两个队列为空如果组成的栈有元素,就要时刻保证一个队列中有元素,另一个队列中没有元素栈的初始化:初始化两个队列即可栈的销毁:销毁两个队列即可入栈:有元素的队列入队列即可出栈:加入有元素的队列中有n个元素,把钱n-1个元素直接出队列,然后直接人另一个队列,把剩下的最后一个元素出队列即可取栈顶元素:加入有元素的队列中有n个元素,把钱n-1个元素直接出队列,然后直接人另一个...原创 2018-04-26 20:24:40 · 213 阅读 · 0 评论 -
两个栈实现一个队列
队列的特点是先进先出,也就是说,存进队列的顺序和从队列中取出的顺序是一样的栈的特点是后进先出,也就是说,存进栈内的顺序和从栈中去出的数据是相反的,入过用两个栈,第一个栈将数据反向,第二个栈又将第一个栈的数据反向,最后得到的序列与从队列中得到的序列一致,示意图如下:代码如下: 头文件:QueueByTwoStack.h#pragma once #include<stdio.h>...原创 2018-04-26 20:08:25 · 243 阅读 · 0 评论 -
用fock实现简易shell(程序替换)
fork之后就会创建则进程,数据、堆、栈有两份,代码仍然为一份但是这个代码段成为两个进程的共享代码段都从fork函数中返回,当父子进程有一个想要修改数据或者堆栈时,两个进程真正分裂子进程在创建的时候会复制父进程的代码。不管是共用代码还是复制代码,这就相当于父进程创建了一个和自己功能完全相同的进程,这样一来,子进程就只能进行和父进程一样的操作动作,这样做实际意义并不大,那怎么让子进程干和父进程不一样...原创 2018-04-21 21:26:28 · 326 阅读 · 0 评论 -
sscanf与sprintf详解
sscanf与sprintf需要引入stdio.h头文件sscanf();函数原型:int sscanf(const char *str, const char *format, ...);返回值为format中的字符个数#include<stdio.h>int main(){ char buf2[32] = "hellowhorld!"; char* str1 = "ab...原创 2018-03-29 21:21:01 · 263 阅读 · 0 评论 -
malloc、calloc、realloc、free
void * malloc(size_t size);分配内存块分配一块大小为字节的内存块,返回一个指向块开始的指针。新分配的内存块的内容未被初始化,并保留不确定的值。如果大小为零,则返回值取决于特定的库实现(它可能是或不可能是空指针),但返回的指针不应被解除引用。 void free(void * ptr);取消分配内存块先前由呼叫分配的一块内存的malloc,释放calloc 要么的reall...原创 2018-03-20 12:15:34 · 104 阅读 · 0 评论 -
用递归实现strlen函数
#include<stdio.h>#include<windows.h>int mystrlen(char *string){ if ((*string) == '\0') { return 0; } else { return 1 + mystrlen(++string); }}int main(){原创 2017-12-10 18:56:43 · 916 阅读 · 0 评论 -
用递归和非递归分别实现求第n个斐波那契数。
#include<stdio.h>#include<Windows.h>int fib1(const int n)//非递归{ int a = 1; int b = 1; int sum = 0; int i = 0; for (i = 3; i <= n; i++) { sum = a + b; a = b;原创 2017-12-10 18:52:58 · 330 阅读 · 0 评论 -
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果 A选手说:B第二,我第三; B选手说:我第二,E第四; C选手说:我第一,D第二; D选手说:C最后,我第三; E选手说:我第四,A第一; 比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。 #include<stdio.h>int main(){ int a = 0; int b = 0;原创 2017-11-20 18:29:17 · 322 阅读 · 0 评论 -
C语言—操作符总结
1.运算操作符 加: + (可作为正号) 例: a + b , +4 减: - (可作为正号) 例: a - b , -5 乘: * 例: a * b 除: / 例: a / b 注意: 分母不能为零 取余: % 运算操作符的使用方法,基本与数学上的使用一致2.赋值操作符 例:a =原创 2017-11-19 22:47:52 · 369 阅读 · 0 评论 -
求出0~999之间的所有“水仙花数”并输出
水仙花数(Narcissistic number)也称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是指一N位数,其各个数之N次方和等于该数。 一个三位的“水仙花数”是指其各位数字的立方和确好等于该数本身,如;153=1+5+3?,则153是一个“水仙花数”。 #include<stdio.h>int main(){ int i=0; in原创 2017-11-13 21:42:24 · 391 阅读 · 0 评论 -
编写程序数一下 1到 100 的所有整数中出现多少次数字9
#include<stdio.h>int main(){ int i = 0; int count = 0; for (i = 1; i <= 100; i++) { //将1~100 的每个数的个位和十位分别拿出来 看是不是9,如果是9 count++ if (9 == i % 10) // 将常量写在 == 的前面,避免少写一个 =原创 2017-11-13 21:30:35 · 404 阅读 · 0 评论 -
计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值
1.计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值。2.编写程序数一下 1到 100 的所有整数中出现多少次数字9。原创 2017-11-09 20:23:04 · 344 阅读 · 0 评论 -
写一个函数返回参数二进制中 1 的个数
写一个函数返回参数二进制中 1 的个数 比如: 15 0000 1111 4 个 1 #include<stdio.h>int fun(int a){ int count = 0; while (a) { count++; a = a & (a - 1); //a & (a - 1)的结果会是a对应的二进制数中的1少一个原创 2017-11-18 00:55:43 · 134 阅读 · 0 评论 -
递归方式实现打印一个整数的每一位
#include<stdio.h>#include<windows.h>void fun(int n){ if(n>0) { fun(n / 10); printf("%d ", n % 10); }}int main(){ int n = 1234; fun(n); system("pause"); r原创 2017-12-10 18:58:42 · 250 阅读 · 0 评论 -
C语言—三子棋
使用工具:VS2017代码分为三部分 game.h(函数声明) game.c(实现函数功能) test.c(main函数)棋盘为3*3的矩阵规则: 1.每回合玩家与电脑只能放置一枚棋子 2.已有棋子的位置不能再放置棋子 3.若有一方的三枚棋子可连城一条直线,则胜利 4.若棋盘棋子已经布满,但是双方没有一方胜利,则平局此程序设计的电脑走的方式是产生一个随机值作为坐标,较为简单,可改进,让电脑更原创 2017-12-02 12:28:32 · 172 阅读 · 0 评论 -
c语言实现通讯录(malloc版)
提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人头文件test.h#ifndef _TEST_H#include<stdio.h>#include<stdlib.h>#include<string.h>typede...原创 2018-03-20 11:57:13 · 294 阅读 · 0 评论 -
结构体、联合、枚举
>结构体类型创建 一般的,在声明一个结构提示要使用struct关键字,例如:创建一个学生struct Stu char name [20] ;//名字 int age ;//年龄 char sex [5] ;//性别 char id[20] ;//学号};//!分号不能丢结构体得特殊声明(没有结构体名):struct{ int a; flo...原创 2018-03-13 14:38:14 · 142 阅读 · 0 评论 -
数据结构—顺序表
顺序表:用一段地址连续的存储单元依次存储数据元素的线性结构地址连续的空间,一般情况下采用数组,但数组有静态数组和动态数组所以顺序表分为:静态顺序表和动态顺序表程序分为三个部分:seqlist.h(头文件)、seqlist.c(函数实现)、 main.c(测试文件)seqlist.h部分#pragma once ...原创 2018-03-11 22:06:19 · 333 阅读 · 1 评论 -
对于各种指针的理解
在定义指针变量时,用 type + * 的方式 例如: int *p; char *ch; ...说明一点,*和变量名没关系,也可以写成如下风格,单独的p和ch叫做指针变量 int* p; char* ch; ...一个指针只能指向与它类型相同的类型 如下:int a = 0;int *p = &a;char ch = 'A';char *q = &ch;in原创 2017-12-28 13:30:05 · 199 阅读 · 0 评论 -
可变参数列表
由栈帧结构可知,被调用函数的参数在创建的时候最左边的最后被创建,因此只要知道第一个参数的地址(被调用函数必须有第一个参数),就可以得到其他参数的内容。例如: int fun(int a, ...)a为第一个元素,不可省略, … 代表可变参数列表如图: fun函数的参数部分在调用fun函数的函数和fun函数之间存储,当调用fun函数时,不管传了几个参数,只要将a变量的地址给一个指针变量,这个指针原创 2017-12-28 13:16:21 · 362 阅读 · 0 评论 -
c语言—扫雷游戏
使用工具:VS2017代码分为三部分 game.h(函数声明) game.c(实现函数功能) test.c(main函数)规则: 1.第一次输入坐标不会踩雷,如果是雷,这颗雷被移走 2.如果周围有雷则显示雷的数量 3.所有不是雷的坐标被排除,玩家胜利 4.排雷过程中踩到雷,玩家失败mine_arr[ROLS][ROWS] 为雷阵 ,1为雷 0不是雷 face_arr[ROL][原创 2017-11-27 18:45:26 · 329 阅读 · 0 评论 -
栈帧与函数调用过程
程序的地址空间程序的地址空间图中,从下向上,地址不断增长,从0x00000000到0xFFFFFFFF。 code:代码区,存储代码 字符、串常量区:存储不能被修改的常量 Init,uninit:全局区,分别为初始化全局区,和未初始化全局区,存储全局变量 heap:堆,使用malloc在堆申请空间,在堆上创建的变量使用完毕后要手动释放空间 栈:在离堆较远处的一块空间叫做栈,用于存放临时变量原创 2017-12-11 19:58:56 · 400 阅读 · 0 评论 -
在VS中使用scanf()不报错的方法
用过VS的都知道,VS中使用scanf()函数会报错,canf()在读取时不检查边界,所以可能会造成内存泄露,所以VS提供了scanf_s()来替代,在调用时,必须提供给scanf_s一个数字以表明读取多少位字符,用法为scanf_s(“%c”,&letter,sizeof(letter))先看一段代码#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>原创 2017-12-02 13:01:22 · 9339 阅读 · 2 评论 -
继承
c++中什么是继承?先上一段代码:class Parent {public: void f1() { std::cout << "f1()" << std::endl; }private: int _a; int _b;};class Child : Parent{public: void f2() ...原创 2018-08-07 10:58:48 · 531 阅读 · 0 评论