自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

原创 电子通讯录(用文件写,掉电可保存联系人)

学习C语言阶段写的一个程序,实现了一个类似手机通讯录的东西,有添加好友,列表信息,搜索好友,删除好友等功能。添加好友或删除好友时会对配置文件进行相应操作,程序停止后,再次运行时,先从配置文件中读取信息,搭建链表,上次的信息便不会丢失。#ifndef __LINKLIST_H__#define __LINKLIST_H__#define TRUE 1#define FALSE 0

2017-08-11 09:33:53 281

原创 二分插入排序

二分插入排序在插入排序的基础上进行了改进,通过不断地分区来快速找到需要插入的位置,在顺序比较混乱时,效率要比插入排序高很多,但在排序基本完成是,效率要比插入要低。 #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 731

原创 希尔排序

#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 155

原创 堆排序

堆排序是一种非常常见的排序,它通过将要排序的序列构建成一个堆,通过不停地将堆顶元素与队尾元素交换来对序列进行排序。 #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 132

原创 归并排序

归并排序同过递归实现,将要排序的序列不断地分为两区,分别进行排序后,再将两区合并成一个有序的完整序列。 #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 164

原创 快速排序

#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 126

原创 插入排序

插入排序可以用一个抽扑克牌的模型来便于理解,手上的牌默认是排好序的,每次抓牌后,进行比较,大的往后移动,知道比较到小的才插入。 #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 101

原创 选择排序

选择排序可以说是冒泡的一种升级版,它每轮只交换一次,减少了交换的次数,提高了效率。 #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 126

原创 冒泡排序和鸡尾酒排序

#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 164

原创 层次遍历(用栈代替队列)

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 1339

原创 非递归方法后序遍历二叉树

typedef char BTreeData;// 二叉树的结点typedef struct _btreeNode{BTreeData data;struct _btreeNode *lchild;   // 指向左孩子结点的指针struct _btreeNode *rchild;   // 指向右孩子结点的指针}BTreeNode; // 二叉树t

2017-08-06 21:51:46 257

原创 非递归方法中序遍历二叉树

typedef char BTreeData;// 二叉树的结点typedef struct _btreeNode{BTreeData data;struct _btreeNode *lchild;   // 指向左孩子结点的指针struct _btreeNode *rchild;   // 指向右孩子结点的指针}BTreeNode; // 二叉树t

2017-08-06 21:51:22 219

原创 非递归方法前序遍历二叉树

typedef char BTreeData;// 二叉树的结点typedef struct _btreeNode{BTreeData data;struct _btreeNode *lchild;   // 指向左孩子结点的指针struct _btreeNode *rchild;   // 指向右孩子结点的指针}BTreeNode; // 二叉树t

2017-08-06 21:50:59 245

原创 李白打酒

话说大诗人李白,一生好饮。幸好他从不开车。    一天,他提着酒壶,从家里出来,酒壶中有酒2斗。他边走边唱:    无事街上走,提壶去打酒。    逢店加一倍,遇花喝一斗。    这一路上,他一共遇到店5次,遇到花10次,已知最后一次遇到的是花,他正好把酒喝光了。     请你计算李白遇到店和花的次序,可以把遇店记为a,遇花记为b。则:babaabbabbabbbb

2017-08-06 21:50:25 125

原创 共用体判断大小端模式

大端模式:字数据的高字节存储在低地址中,而字数据的低字节则存放在高地址中。小端模式:字数据的高字节存储在高地址中,而字数据的低字节则存放在低地址中。  #include  // 小端返回真(1),大端返回假(0)int isLittleEndian(){union{char ch;int a;}a;a.a = 1;return (a.

2017-08-06 21:49:15 430

原创 结构体的内存对齐

数据项只能存储在地址是数据项大小的整数倍的内存位置上例如int类型占用4个字节,地址只能在0,4,8等位置上。 内存对齐系数:每个操作系统都有自己的默认内存对齐系数,如果是新版本的操作系统,默认对齐系数一般都是8,(例如int是4,char是1,long在32位编译时是4,64位编译时是 8)。当操作系统的默认对齐系数与内存对齐的理论产生冲突时,以操作系统的对齐系数为基准。

2017-08-05 22:29:12 130

原创 递归实现十进制数转十六进制数

典型的递归:// 阶乘函数,求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 4490

原创 指针数组

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 171

原创 指针方式逆序数组

#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 929

原创 字符串的实用操作

普通字符串的逆序:    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 148

原创 数组操作

数组逆序: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 155

原创 流程控制语句

选择语句: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 130

原创 表达式与流程控制

基本算术运算符 + (加)、- (减)、 * (乘)、 / (除)和 % (求余数)这五个运算符的优先级为:      *、/ 和%同级,但比+和-高。即先乘除后加减。 算术表达式是由算术运算符和操作数组成的表达式。表达式的值是一个数值,表达式的类型具体由运算符和操作数确定。 例如:  5+3*(6-2)    表达式的类型为int 型。      

2017-08-05 22:16:45 258

原创 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 188

原创 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 224

原创 Linux基础

命令:注意: 命令和参数,命令和参数之间要有空格cd  进入目录ls  列举目录内容ls  -a  列举所有文件包含隐藏的文件所有隐藏文件都是  以 .开始的ls  -l ==   ll 清屏: clear    ==  Ctrl + l  ll 查看文件详细信息第一栏: 文件的权限第一栏的第一个字符:-    普通文件d    代表目录

2017-08-05 22:14:01 102

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除