C语言
ox0080
surprise
展开
-
数据结构线性表---顺序表
#include<stdio.h>#include<stdlib.h>#include<string.h>typedef int ElemType;const int SIZE =20; /*线性表的起始长度*/const int Add_Capacity = 10; /*线性表的每次扩容大小*/struct SqList {...原创 2018-05-12 15:19:57 · 132 阅读 · 0 评论 -
桶排序C语言版
桶排序 (Bucket sort)是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,它不受到 O(n log n) 下限的影响。 /* *桶排序,时间复杂度为O(n),但...原创 2018-10-28 20:14:08 · 1720 阅读 · 0 评论 -
冒泡排序C语言版
冒泡排序(Bubble Sort),又被称为气泡排序或泡沫排序。它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置.void bubble_sort(int *arr,int length){ int temp; for(int i = 0;i < length - 1; ...原创 2018-10-28 20:19:32 · 853 阅读 · 0 评论 -
快速排序C语言版
快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。--------------------- 思想:1 选取一个关键字(key)作为枢轴,一般取整组...原创 2018-10-24 16:24:39 · 749 阅读 · 0 评论 -
字符串匹配算法
BF(Brute Force)算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。int bf(const char *s,const char *p,int pos){ int s_...原创 2018-11-03 12:09:59 · 81 阅读 · 0 评论 -
指针辨析
指针是什么?任何程序数据载入内存后,在内存都有它们的地址,这就是指针。而为了保存一个数据在内存中的地址,我们就需要指针变量。因此:指针是程序数据在内存中的地址,而指针变量是用来保存这些地址的变量。一 指针数组(存放指针的数组)与数组指针(指向数组的指针)指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。数组指针:首先它...原创 2018-11-03 13:44:03 · 174 阅读 · 0 评论 -
C/C++中static再探讨
1. C 语言中的static内存布局:初始化数据段---.data段通常将此段称为数据段,它包含了程序中需赋初值的变量。初始化 的全局变量和静态变量存放在这里 。例如,C程序中任何函数之外的说明:int maxcount = 99; 使此变量以初值存放在初始化数据段中。a.初始化的全局变量b.初始化的静态变量非初始化数据段---.bss段通常将此段称为bss段,这一名称来源...原创 2018-11-03 15:18:39 · 135 阅读 · 0 评论 -
Linux shell命令解析器(一),bash终端
环境:Ubuntu14-4 内核 4.4.0-135vim编辑器 7.4 gcc 4.8.4 1.1 知识点Shell 的基本概念 进程控制相关的系统调用的使用(如 fork,exec函数族)整理框架:1.命令解释器首先是一个死循环。2.打印一个命令提示符。3.取得命令行输入放在数组里面,要求命令带参数。可以getc()、fgets()、scanf()等。...原创 2018-11-04 13:03:50 · 3232 阅读 · 1 评论 -
C/C++中const探讨
学习const之前先来回顾三个概念,常量,变量,常变量常量:常量是程序运行过程中其值不能改变的量,我们任意说一个数字,一个单词都是一个常量,例如3就是常量,apple也是常量,常量就相当于数学上常数的概念,只不过计算机数据类型并不是只有数字,所以称之为常量。根据数据类型的不同又分为数值常量,字符常量,字符串常量和符号常量。变量:变量是在程序运行过程中其值可以改变的量,变量有变量类型,变量名...原创 2018-11-04 17:32:35 · 180 阅读 · 0 评论 -
Linux C语言编程基本命令大全
基本命令 关机:shutdown -h halt init 0 poweroff重启:shutdown -r reboot init 6pwd:查看工作目录ls:查看指定目录的内容-l:列表显示-a:显示所有,包括隐藏文件-h:人性化的显示-d:只显示目录,不查看内容cd:切换工作目录.:当前目录..:上一级目录~:用户家目录-:上次切...原创 2018-11-02 21:47:12 · 5628 阅读 · 0 评论 -
Linux写时拷贝技术(copy-on-write)
在Linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制“技术,也就是只有进程空间的各段的内容要发生变化时,才会将父进程的内容复制一份给子进程。 那么子进程的物理空间没有代码,怎么去取指令执行exec系统调用呢? 在fork之后exec之前两个进程用的是相同的物理空间(内存区),子...原创 2018-11-04 19:56:37 · 271 阅读 · 0 评论 -
位运算☞二进制神秘面纱
二进制: 二进制是计算技术中广泛采用的一种数制。二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。当前的计算机系统使用的基本上是二进制系统,数据在计算机中主要是以补码的形式存储的。计算机中的二进制则是一个非常微小的开关,用“开”来表示1,“关”来表示0。20世纪被称作第三次科技革命的重要标志...原创 2018-11-10 12:56:22 · 461 阅读 · 0 评论 -
位运算☞加减乘除运算
1. 加法运算13 + 9 = 21// 13--0000 1101// 9--0000 1001十进制思想:不考虑进位,分别对各位数进行相加,结果为sum: 个位数3加上9为2;十位数1加上0为1; 最终结果为12; 只考虑进位,结果为carry: 3 + 9 有进位,进位的值为10; 如果步骤2所得进位结果carry不为0,对步骤1所得sum,步骤2所得c...原创 2018-11-10 14:20:10 · 240 阅读 · 0 评论 -
强悍的不可思议的位运算(续)
原文:http://blog.csdn.net/nash_/article/details/82621851.获得int型最大值int getMaxInt(){ return (1 << 31) - 1;//2147483647, 由于优先级关系,括号不可省略 } 另一种写法int getMaxInt(){ return ~(1...原创 2018-11-18 17:23:33 · 167 阅读 · 0 评论 -
希尔排序C语言版
希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 希尔排序的基本思想就是:将需要排序的序列划分为若干个较小的序列,对这些序列进行直接插入排序,通过这样的操作可使需要排序的数列基本有序,最后再使用一次直接插入排序。 在希尔排序中首先要解决的是怎样划分序列,对于子序列的构成不是简单地分段,而是采取将相隔某个增量的数据组成一...原创 2018-10-28 20:06:37 · 2730 阅读 · 1 评论 -
归并排序C语言版
归并排序的基本思想:将两个及其以上的有序表合并为一张有序表,把待排序序列通过分治法分为若干个有序子序列,然后每两个子序列合并为一个子序列,经过多次合并后整合为一张有序表。归并排序是稳定排序,它也是一种十分高效的排序,能利用完全二叉树特性的排序一般性能都不会太差。java中Arrays.sort()采用了一种名为TimSort的排序算法,就是归并排序的优化版本。从上文的图中可看出,每次合并操...原创 2018-10-28 19:57:52 · 405 阅读 · 2 评论 -
堆排序C语言版
AfxStd.h#pragma once#ifndef AFXSTD_H#define AFXSTD_H#include<stdio.h>#include<stdlib.h>#include<assert.h>#endif // !AFXSTD_Hheap.h#pragma once#include"AfxStd.h"#ifndef HEAP_...原创 2018-06-22 10:36:48 · 134 阅读 · 0 评论 -
数据结构线性表---单链表
AfxStd.h#pragma once#ifndef AFXSTD_H#define AFXSTD_H#include <stdio.h>#include <stdlib.h>#include<string.h>#endif // !AFXSTD_HList.h#pragma once#include "AfxStd.h"#ifndef LI...原创 2018-06-22 10:48:17 · 174 阅读 · 0 评论 -
数据结构线性表---双链表
AfxStd.h#ifndef AfxStd#define AfxStd#include<stdio.h>#include<stdlib.h>#include<string.h>#include<malloc.h>#endif // !USUSL_HDList.h#ifndef DLIST_H#define DLIST_H#incl...原创 2018-06-22 10:53:03 · 129 阅读 · 0 评论 -
数据结构队列---循环可变长队列
AfxStd.h#pragma once#ifndef AfxStd_H#define AfxStd_H#include<stdio.h>#include<stdlib.h>#include<string.h>#endif // !AfxStdQueue.h#pragma once#include"AfxStd.h"#ifndef Queue_...原创 2018-06-22 11:10:14 · 429 阅读 · 0 评论 -
数据结构队列---链式队列
AfxStd.h#pragma once#ifndef AfxStd_H#define AfxStd_H#include<stdio.h>#include<stdlib.h>#include<string.h>#endif // !AfxStdLinkQueue.h#pragma once#include"AfxStd.h"#ifndef LI...原创 2018-06-22 11:14:36 · 125 阅读 · 0 评论 -
数据结构队列---优先级队列
优先级队列(priorityqueue)是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素(3)删除一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素。对于优先权相同的元素,可按先进先出次序处理或按任意优先权进行。 优先级队列 是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。队列下方的数组用二叉树来处...原创 2018-06-22 11:42:18 · 295 阅读 · 0 评论 -
统计文件中单词个数
有限状态机(finite-state machine,缩写FSM),又称有限状态自动机,简称状态机,表示有限个的状态,以及在这些状态之间的动作和行为的数学模型。但我想说的是基于这种思路的组织代码的方式。这样可以让你的对象一直清楚自己的状态并且知道这个状态所能有的操作。这个东西可以用于实现游戏角色的基本逻辑(恩,百度百科)。状态机的每个状态的代码模块都是分开的,利用各自的判断条件在不同的状态之间切换...原创 2018-06-22 16:02:58 · 2297 阅读 · 0 评论 -
static关键字与内存
为什么要引入static?函数内部定义的变量,在程序执行到它的定义处时,编译器为它在栈上分配空间,大家知道,函数在栈上分配的空间在此函数执行结束时会释放掉,这样就产生了一个问题: 如果想将函数中此变量的值保存至下一次调用时,如何实现? 最容易想到的方法是定义一个全局的变量,但定义为一个全局变量有许多缺点,最明显的缺点是破坏了此变量的访问范围(使得在此函数中定义的变量,不仅仅受此函数控制)。伴随着不...原创 2018-06-23 11:42:48 · 175 阅读 · 0 评论 -
C/C++语言宏的用法
C/C++宏的使用:1. 防止多重包含 2. 条件编译 3. 定义字面值常量 4. 定义为函数 5. 可变参数宏 6. 宏组合 6.1 一般用法 6.2 当宏参数是另一个宏的时候 6.2.1 非'#'和'##'的情况 6.2.2 当有'#'或'##'的时候 6.3 '#'和'##'的一些应用特例 6.3.1 合并匿名变量名 6.3.2 填充结构 ...原创 2018-07-28 17:40:02 · 1516 阅读 · 0 评论 -
C/C++文件操作
最近在复习排序算法,复习到了外部排序(又称海排),自然而然的用到了一些C中文件操作相关的内容,在这里正好顺便复习整理一下.--------------------------------------正文分割线--------------------------------------------1.0 数据的存放形式及读取方式1>文本文件二进制文件2>字符...原创 2018-10-19 16:37:09 · 195 阅读 · 0 评论 -
选择排序C语言版
简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[0]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[1]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i-1]交换,使有序序列不断增长直到全部排序完毕.void select_sort(int *arr,int length){ int...原创 2018-10-28 19:22:34 · 337 阅读 · 0 评论 -
插入排序C语言版
插入排序是最简单的排序算法。正式表述为:插入排序每次从无序数据集中取出一个元素,扫描已排好序的数据集,并将它插入有序集合的合适位置上。虽然乍一看插入排序需要独立为有序和无序的元素预留足够的存储空间,但实际上它是不需要额外的存储空间的。插入排序是一种较为简单的算法,但它在处理大型数据集时并不高效。因为在决定将元素插入哪个位置之前,需要将被插入元素和有序数据集中的其他元素进行比较,这会随着的数据集...原创 2018-10-28 19:32:26 · 162 阅读 · 0 评论 -
C语言宏详解
宏基础宏仅仅是在C预处理阶段的一种文本替换工具,编译完之后对二进制代码不可见。基本用法如下:1. 标示符别名#define BUFFER_SIZE 1024预处理阶段,foo = (char *) malloc (BUFFER_SIZE);会被替换成foo = (char *) malloc (1024);宏体换行需要在行末加反斜杠\#define NUMBERS 1,...原创 2018-11-17 16:14:00 · 3438 阅读 · 1 评论