![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
C__zhang
这个作者很懒,什么都没留下…
展开
-
布隆过滤器
实现完整代码/***************************************************///BloomFilter.h#include "BitMap.h"#include "Common.h"typedef int(*PSTRTINT)(const char*);typedef struct BloomFilter{ BitMap _bmp;...原创 2018-10-26 16:47:35 · 215 阅读 · 0 评论 -
一个简单的日历查找
实现代码#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <stdlib.h>int months[2][13] = { { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }, { 0, 31, 29, 31, 30, ...原创 2018-09-04 20:57:03 · 323 阅读 · 0 评论 -
八皇后(n皇后)问题
问题描述 八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n1×n1,而皇后个数也变成n2。而且仅当 n2 = 1 或 n1 ≥ 4 时问题有解。 八皇后问题最早是由国际西...原创 2018-09-04 20:48:22 · 351 阅读 · 0 评论 -
时间复杂度_空间复杂度
衡量一个算法的好坏: 时间复杂度 &amp;amp;amp;amp; 空间复杂度时间复杂度—&amp;amp;amp;gt;基本语句关于问题规模n的数学表达式【f(n) = 常数*n^2 + 常数*n + 常数】空间复杂度—&amp;amp;amp;gt;创建变量个数关于问题规模n的数学表达式常用o渐进表示法表示时间复杂度与空间复杂度: o渐进表示法时间复杂度求解方式:1.求解数学表达式2.数学表达式有多各项,只保留最高阶项(增长原创 2018-08-23 16:48:27 · 275 阅读 · 0 评论 -
二叉树的基本操作及面试题
完整代码/************************************///BinTree.htypedef int BDataType;typedef struct BTNode{ struct BTNode *_pLeft; struct BTNode *_pRight; BDataType data;}BTNode;//创建二叉树...原创 2018-08-29 17:53:45 · 451 阅读 · 0 评论 -
栈的基本操作
/************************************///Stack.h#define MAXSIZE 10typedef int SDataType;typedef struct Stack{ SDataType _array[MAXSIZE]; int _top; //标记栈顶元素}Stack;//初始化void StackIn...原创 2018-08-28 21:54:11 · 491 阅读 · 0 评论 -
简易的贪吃蛇小游戏
/***********************************************///Snake.h#ifndef __SNAKE_H__#define __SNAKE_H__#include <Windows.h>#include <stdio.h>#include <stdlib.h>#define WALL "◆"#...原创 2018-08-29 17:36:53 · 273 阅读 · 0 评论 -
括号匹配_逆波兰函数(栈)
//1.括号匹配/*取一个字符:1.检测该字符是否为括号:是括号,继续1,否则返回2.如果是左括号--&amp;gt;入栈3.如果是右括号,检测该括号是否与栈顶括号匹配是:将栈顶元素出栈否:括号的匹配次序出错栈是否为空:空:正确非空:左比右括号多*/int IsBrackets(char ch)//判断括号函数{ if (('(' == ch) || (')' == ...原创 2018-08-28 21:56:56 · 467 阅读 · 0 评论 -
带环迷宫
#pragma once/************************************///Stack.h#define MAXSIZE 10//typedef int SDataType;//typedef char SDataType;/////////////////////////////迷宫定义的结构体与栈的数据类型不同typedef struct ...原创 2018-08-29 17:09:23 · 194 阅读 · 0 评论 -
链表面试题
//1.从头到尾打印单链表//递归法void ReversePrintDG(SList *pFirst){ if (pFirst == NULL){ printf(&amp;amp;amp;quot;NULL &amp;amp;amp;amp;lt;-&amp;amp;amp;quot;); return; } ReversePrintDG(pFirst-&amp;amp;amp;a原创 2018-08-28 21:51:23 · 277 阅读 · 0 评论 -
简单迷宫
/************************************///Stack.h#define MAXSIZE 10//typedef int SDataType;//typedef char SDataType;/////////////////////////////迷宫定义的结构体与栈的数据类型不同typedef struct Position{ ...原创 2018-08-29 16:57:58 · 328 阅读 · 0 评论 -
指针与数组的对比
C++/C 程序中,指针和数组在不少地方可以相互替换着用,让人产生一种错觉,以为两者是等价的,数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着 (而不是指向)一块内存,其地址与容量在生命期内保持不变,只有数组的内容可以改 变,指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存,指针远比数组灵活,但也更危险。 下面以字符串为例比较指针与...原创 2018-08-20 16:52:57 · 706 阅读 · 0 评论 -
动态内存开辟
1.内存分配方式(三种) (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的 整个运行期间都存在。例如全局变量,static 变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3)从堆上分配,亦称动态内存分配。程序在运...原创 2018-08-19 21:24:54 · 1445 阅读 · 1 评论 -
枚举_联合(共用体)
枚举 枚举顾名思义就是一一列举,把可能的取值列举出来。枚举类型定义:enum Day//星期{ Mon, Tuse, Wed, Thur, Fir, Sat, Sun};enum Color//颜色{ RED, GREEN, BLUE};以上的定义的两个enum Day,enum Co...原创 2018-08-19 18:31:46 · 662 阅读 · 0 评论 -
蛇形数组的实现
实现代码#include &amp;amp;amp;lt;stdio.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;stdlib.h&amp;amp;amp;gt;#include &amp;amp;amp;lt;Windows.h&amp;amp;amp;gt;#define N 10int arr[N][N] = {0};void show(voi原创 2018-09-04 21:00:54 · 620 阅读 · 1 评论 -
优先级队列(堆)
模块函数 【1.定义一个优先级队列结构体】结构体中放一个堆类型的元素typedef struct PriorityQueue{ Heap _hp;}PriorityQueue;【2.初始化优先级队列】调用堆初始化函数进行操作void InitPriorityQueue(PriorityQueue* q){ InitHeap(&q-...原创 2018-09-02 11:49:11 · 348 阅读 · 0 评论 -
位图的实现
完整代码块/************************************************///BitMap.h#pragmatypedef struct BitMap{ int* _pBit;//bit位的集合 int _capacity;//bit位总的个数j int _size;//有效:bit位为1的个数}BitMap;//初始化void...原创 2018-10-18 14:37:16 · 233 阅读 · 0 评论 -
归并排序
归并排序#include &amp;amp;lt;string.h&amp;amp;gt;#include &amp;amp;lt;assert.h&amp;amp;gt;#include &amp;amp;lt;malloc.h&amp;amp;gt;void MergeData(int *array, int left, int middle, int right, int *temp){ in原创 2018-10-08 17:16:44 · 215 阅读 · 0 评论 -
快速排序
快速排序(1)在待排序的序列中找一个基准值—[left, right)— 区间中最后一个元素(2)方法:按基准值将序列分割成左右两部分(3)排基准值的左边(4)排基准值的右边//三数取中法(通过这种方法降低取到极值的概率)int GetMiddleIndex(int *array, int left, int right){ int mid = left + ((right -...原创 2018-10-08 17:13:13 · 257 阅读 · 0 评论 -
冒泡排序
冒泡排序//冒泡排序void BubbleSort(int *array, int size){ int i, j; for (i = 0; i &amp;lt; size; i++) { int isChange = 0; for (j = 0; j &amp;lt; size - i - 1; ++j) { if (array[j] &amp;gt; array[j + 1]) {...原创 2018-10-08 17:07:34 · 206 阅读 · 0 评论 -
堆排序
堆排序//堆排序void HeapSort(int *array, int size){ //1.建堆--升序--大堆 int end = size - 1; int root = ((size - 2) &amp;amp;gt;&amp;amp;gt; 1); for (; root &amp;amp;gt;= 0; --root) HeapAdjust(array, size, root); //2.排序---删除...原创 2018-10-08 17:03:06 · 191 阅读 · 0 评论 -
选择法排序
实现代码//选择法排序void SelectSort(int *array, int size){ int i; for (i = 0; i &amp;amp;lt; size - 1; ++i) { int j = 1; int maxPos = 0; for (; j &amp;amp;lt; size - i; ++j) { if (array[j] &amp;amp;gt; array[maxPos])...原创 2018-10-05 19:55:46 · 1839 阅读 · 0 评论 -
希尔排序
实现代码块//希尔排序void ShellSort(int *array, int size){ //int gap = 3; //int gap = gap / 3 + 1;这个方式较优 int gap = size; while (gap &amp;amp;amp;amp;amp;amp;gt; 1) { int i = 0; gap = gap / 3 + 1; for (i = gap; i &amp;amp;amp;amp;amp;am原创 2018-10-05 16:04:59 · 239 阅读 · 0 评论 -
插入法排序
实现代码#include &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;amp;amp;amp;gt;//打印函数void PrintArray(int *array, int size){ int i = 0; for (; i &amp;amp;amp;amp;amp;amp;amp;amp;amp;lt; size; i++) { pri原创 2018-10-03 23:15:00 · 6105 阅读 · 0 评论 -
哈希桶(开散列)
完整代码块/***************************************///HashBucket.h#pragma oncetypedef int HBDataType;typedef struct HashBucketNode{struct HashBucketNode *_pNext;HBDataType _data;}Node, *PNode;//将d...原创 2018-10-02 20:53:06 · 283 阅读 · 0 评论 -
哈希算法的优化(闭散列)
完整代码块/***************************************///Hash_OP.h#define MAX_SIZE 10//typedef int DataType;typedef char *DataType;typedef int(*PDTInt)(DataType data);//转int类型typedef enum{ EXIST, E...原创 2018-10-02 20:16:52 · 706 阅读 · 0 评论 -
多字符从两端移动向中间汇聚
编写一个代码,演示多个字符从两端移动向中间汇聚#include &amp;amp;amp;amp;amp;amp;amp;lt;stdio.h&amp;amp;amp;amp;amp;amp;amp;gt;#include &amp;amp;amp;amp;amp;amp;amp;lt;windows.h&amp;amp;amp;amp;amp;amp;amp;gt;int main(){ char arr1[] = &am原创 2018-04-21 09:25:19 · 340 阅读 · 0 评论 -
哈希算法(闭散列)
模块代码函数 【1.定义一个哈希算法结构体】#define MAX_SIZE 10typedef int DataType;typedef enum{EXIST, EMPTY, DELETE}State;typedef struct HTElem{ DataType _data; State _state;}HTElem;typedef struct ...原创 2018-09-03 14:26:45 · 366 阅读 · 0 评论 -
堆排序(升序)
堆排序操作//堆排序向下调整void HeapAdjustDown(int *arr, int size, int parent){ int child = parent * 2 + 1; assert(arr); //while (child &amp;lt; size) //{ // if (child + 1 &amp;lt; size &amp;amp;&amp;amp;...原创 2018-09-02 12:01:08 · 1116 阅读 · 0 评论 -
结构体内存对齐
内存对齐 内存对齐”应该是编译器的“管辖范围”。编译器为程序中的每个“数据单元”安排在适当的位置上,但是C语言的一个特点就是太灵活,太强大,它允许你干预“内存对齐”。为什么存在内存对齐? 1.平台原因(移植原因) 不是所有的硬件平台任意地址上的任意数据的,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。2.性能原因: 数据结构(尤其是栈)应该尽可能的在自然边界上...原创 2018-08-19 16:42:31 · 252 阅读 · 0 评论 -
回调函数
回调函数的定义:回调函数就是一个通过指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时我们就说这还是回调函数;回调函数不是由该函数的是想方式直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于该事件或条件进行响应。使用回调函数模拟实现冒泡排序(可实现多个字符串排序):#include &amp;lt;stdio.h&amp;gt;in...原创 2018-08-19 15:48:00 · 162 阅读 · 0 评论 -
模拟用户密码登录
模拟用户密码登录情景,并且只能登录三次,只允许输入三次密码,如果输入正确则提示登录成功,如果三次均输入错误,则退出程序。#define _CRT_SECURE_NO_WARNINGS 1#include &lt;stdio.h&gt;#include &lt;string.h&gt;int main(){ char password[] = "20180325"; ...原创 2018-04-18 14:57:19 · 672 阅读 · 0 评论 -
折半查找(二分查找)
折半查找(又称二分查找)简单的理解就是整形有序的数组中,在查找过程中把要查找的与数组最中间的数进行比较以次循环进行查找,找到了返回下标,找不到返回 - 1。#include &amp;lt; stdio.h &amp;gt;#include &amp;lt; stdlib.h&amp;gt;//折半查找函数int binary_search(int arr[], int key, int line)//确定...原创 2018-04-18 14:37:29 · 276 阅读 · 0 评论 -
猜数字小游戏
用C语言写一个猜数字游戏:用一个简短的C语言代码实现一个猜数字小游戏,利用库函数生成随机数,猜大了就返回你猜大了,猜小了就返回你猜小了,当猜数正确时返回你已猜到正确结果。#define _CRT_SECURE_NO_WARNINGS 1#include &amp;lt;stdio.h&amp;gt;#include &amp;lt;stdlib.h&amp;gt;#include &amp;lt;time.h&am原创 2018-04-18 14:10:13 · 368 阅读 · 0 评论 -
关于C语言中printf的一个简单使用
首先我们先来看一个有趣的C语言代码,猜猜输出结果:#include<stdio.h>int main(){ int i = 43; printf("%d\n", printf("%d", printf("%d", i))); system("pause"); return 0;}输出结果: 为什么原创 2018-04-18 13:28:12 · 793 阅读 · 0 评论 -
三字母词和转义字符
三字母词在使用转义字符之前我们先看一段代码:#include<stdio.h>int main(){ printf("(are you ok ??)\n"); return 0;}程序输出的结果: 为什么这个程序不能正常的输出我们想要的(are you ok ??)结果呢?原因在于这几个字符的序列合并起来表示另一个字符——三字母词 三字母词 表示字符 ??(原创 2018-04-17 15:13:20 · 473 阅读 · 2 评论 -
内存存储大小端介绍
为什么会有大小端模式之分呢?这是因为在计算机系统中,我们是以字节为单位的,每个地址单元对应着一个字节,一个字节8bit;但是在C语言中除了8bit的char之外,还有16bit的short型,32bit的long型(要看具体的编译器),另外,对于位数大于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于一个字节,那么必然存在一个如何将多个字节安排的问题,因此就导致了大端存储模式和小端存...原创 2018-04-15 23:00:13 · 733 阅读 · 0 评论 -
用C编写一个简单的乘法口诀表
用C语言编写一个简单的乘法口诀表,输入的数字是:n 就打印 n x n 的乘法口表, 利用for循环进行。#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>int main(){ int n, i, j, num; printf("input:\n"); scanf("%d", &n); printf(原创 2018-04-12 15:01:44 · 1665 阅读 · 0 评论 -
打印素数
打印100~200 之间的素数素数只能被1和它本身整除1.试除法//方法一:#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;stdlib.h&amp;gt;int main(){ int i = 0; int j = 0; int count = 0;//count用于统计素数的个数 for (i = 100; i &amp;l原创 2018-04-10 22:25:19 · 2824 阅读 · 1 评论 -
C语言操作符
操作符分类 算数操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式算数操作符 + — * / % (1)除了 % 操作符之外,其他的几个操作符可以作用于整数和浮点数。 (2)% 操作符的两个操作数必须...原创 2018-04-10 20:24:40 · 361 阅读 · 1 评论