- 博客(26)
- 收藏
- 关注
原创 电子通讯录(用文件写,掉电可保存联系人)
学习C语言阶段写的一个程序,实现了一个类似手机通讯录的东西,有添加好友,列表信息,搜索好友,删除好友等功能。添加好友或删除好友时会对配置文件进行相应操作,程序停止后,再次运行时,先从配置文件中读取信息,搭建链表,上次的信息便不会丢失。#ifndef __LINKLIST_H__#define __LINKLIST_H__#define TRUE 1#define FALSE 0
2017-08-11 09:33:53 292
原创 二分插入排序
二分插入排序在插入排序的基础上进行了改进,通过不断地分区来快速找到需要插入的位置,在顺序比较混乱时,效率要比插入排序高很多,但在排序基本完成是,效率要比插入要低。 #include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;} //
2017-08-07 09:20:39 743
原创 希尔排序
#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;} // 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[i]
2017-08-07 09:19:48 170
原创 堆排序
堆排序是一种非常常见的排序,它通过将要排序的序列构建成一个堆,通过不停地将堆顶元素与队尾元素交换来对序列进行排序。 #include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;} // 打印数组void printA (int *
2017-08-07 09:19:13 142
原创 归并排序
归并排序同过递归实现,将要排序的序列不断地分为两区,分别进行排序后,再将两区合并成一个有序的完整序列。 #include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;} // 打印数组void printA (int *a, int
2017-08-07 09:18:35 178
原创 快速排序
#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;} // 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[i]
2017-08-07 09:16:32 139
原创 插入排序
插入排序可以用一个抽扑克牌的模型来便于理解,手上的牌默认是排好序的,每次抓牌后,进行比较,大的往后移动,知道比较到小的才插入。 #include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;} // 打印数组void printA
2017-08-06 21:53:29 111
原创 选择排序
选择排序可以说是冒泡的一种升级版,它每轮只交换一次,减少了交换的次数,提高了效率。 #include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;} // 打印数组void printA (int *a, int len){
2017-08-06 21:52:52 131
原创 冒泡排序和鸡尾酒排序
#include // 交换函数void swap (int a[], int i, int j){int tmp = a[i];a[i] = a[j];a[j] = tmp;} // 打印数组void printA (int *a, int len){int i;for (i = 0; i {printf ("%4d", a[i]
2017-08-06 21:52:28 177
原创 层次遍历(用栈代替队列)
typedef int StackData;typedef struct _node{StackData data;struct _node *next;}Node; typedef struct _linkStack{Node *top;}LinkStack; LinkStack *Create_Stack(){LinkStack* s =
2017-08-06 21:52:09 1365
原创 非递归方法后序遍历二叉树
typedef char BTreeData;// 二叉树的结点typedef struct _btreeNode{BTreeData data;struct _btreeNode *lchild; // 指向左孩子结点的指针struct _btreeNode *rchild; // 指向右孩子结点的指针}BTreeNode; // 二叉树t
2017-08-06 21:51:46 266
原创 非递归方法中序遍历二叉树
typedef char BTreeData;// 二叉树的结点typedef struct _btreeNode{BTreeData data;struct _btreeNode *lchild; // 指向左孩子结点的指针struct _btreeNode *rchild; // 指向右孩子结点的指针}BTreeNode; // 二叉树t
2017-08-06 21:51:22 232
原创 非递归方法前序遍历二叉树
typedef char BTreeData;// 二叉树的结点typedef struct _btreeNode{BTreeData data;struct _btreeNode *lchild; // 指向左孩子结点的指针struct _btreeNode *rchild; // 指向右孩子结点的指针}BTreeNode; // 二叉树t
2017-08-06 21:50:59 255
原创 李白打酒
话说大诗人李白,一生好饮。幸好他从不开车。 一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱: 无事街上走,提壶去打酒。 逢店加一倍,遇花喝一斗。 这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。 请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb
2017-08-06 21:50:25 137
原创 共用体判断大小端模式
大端模式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。小端模式:字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。 #include // 小端返回真(1),大端返回假(0)int isLittleEndian(){union{char ch;int a;}a;a.a = 1;return (a.
2017-08-06 21:49:15 441
原创 结构体的内存对齐
数据项只能存储在地址是数据项大小的整数倍的内存位置上例如int类型占用4个字节,地址只能在0,4,8等位置上。 内存对齐系数:每个操作系统都有自己的默认内存对齐系数,如果是新版本的操作系统,默认对齐系数一般都是8,(例如int是4,char是1,long在32位编译时是4,64位编译时是 8)。当操作系统的默认对齐系数与内存对齐的理论产生冲突时,以操作系统的对齐系数为基准。
2017-08-05 22:29:12 138
原创 递归实现十进制数转十六进制数
典型的递归:// 阶乘函数,求n的阶乘int func(int n){if (n == 1)return 1;int res = n * func(n-1);return res;} // 求斐波那契数列中第n个数的值int feibo(int n){if (n == 0 || n == 1)return n;int res
2017-08-05 22:20:09 4570
原创 指针数组
int main(){ // 字符串本身代表一个char*类型的指针!!char *arr[5] = {"hello1","hello2","hello3","hello4","hello5"};char **p = arr;int i;for (i = 0; i {printf ("%s\n", arr[i]);}return
2017-08-05 22:19:37 181
原创 指针方式逆序数组
#include int main(){int a[10] = {1,2,3,4,5,6,7,8,9,10};int *p1 = a; // 指向数组的第一个元素int *p2 = a + sizeof(a)/sizeof(a[0]) - 1; while (p1 {int tmp = *p1;*(p1++) = *p2;*(p2
2017-08-05 22:19:11 1145
原创 字符串的实用操作
普通字符串的逆序: char str[100] = "hello world"; int len = 0; while(str[len++]); // 求出字符串长度,这里的长度包含了\0比实际字符串长度大1 int min = 0; int max = len -2; while (min {
2017-08-05 22:18:19 157
原创 数组操作
数组逆序:int a[10] = {0,3,4,89,8,23,44,7,11,10};int min = 0; // 数组最小下标int max = 9; // 数组最大下标 while(min { int tmp = a[min]; a[min] = a[max]; a[max] = tmp; min++;
2017-08-05 22:17:47 159
原创 流程控制语句
选择语句:1、If语句:if (表达式1) {语句1;}else if(表达式2){语句2;}else{语句3;}表达式1为真 执行语句1为假,如果表达式2为真执行语句2否则,执行语句3 // 输入两个实数a,b,如果a比b大,则将两个数数值交换,按代数值由小到大次序输出这两个数 int main(){fl
2017-08-05 22:17:16 145
原创 表达式与流程控制
基本算术运算符 + (加)、- (减)、 * (乘)、 / (除)和 % (求余数)这五个运算符的优先级为: *、/ 和%同级,但比+和-高。即先乘除后加减。 算术表达式是由算术运算符和操作数组成的表达式。表达式的值是一个数值,表达式的类型具体由运算符和操作数确定。 例如: 5+3*(6-2) 表达式的类型为int 型。
2017-08-05 22:16:45 266
原创 C基础知识和基本数据类型
程序编译:gcc (GNU)gcc 语言文件---> 生成 a.out可执行文件 生成特定的文件:gcc {C语言文件} {-o 生成的文件名称(这个名称最好不要有后缀名)} gcc -o 生成的文件名称 C语言文件 预处理、编译、汇编、链接 1、预处理:gcc -E 源文件(XXXX.c) -o生成的预编译文件(XXXX.i)1)
2017-08-05 22:16:10 205
原创 vim和shell脚本基础
1、文本编辑:gedit (图形界面可以用)vi vim vim 文件名 (文件存在,打开文件 文件不存在:创建文件(文件非空)) 退出: shift+:1、q 退出 不保存退出2、q! 强制退出 不保存3、w 保存文件内容4、wq 保存退出 ==== x vim 三种模式:1、命令行模式:刚开打的状态2、底行
2017-08-05 22:15:20 233
原创 Linux基础
命令:注意: 命令和参数,命令和参数之间要有空格cd 进入目录ls 列举目录内容ls -a 列举所有文件包含隐藏的文件所有隐藏文件都是 以 .开始的ls -l == ll 清屏: clear == Ctrl + l ll 查看文件详细信息第一栏: 文件的权限第一栏的第一个字符:- 普通文件d 代表目录
2017-08-05 22:14:01 107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人