随笔分类 -  DataSturcture & C

摘要:内容提要1. 我掌握的排序算法的时间复杂度2. 我掌握的6种排序算法(插入, 冒泡, 选择, 归并, 快速, 希尔)3. 迷宫的搜索方法(深度优先 + 广度优先)各种排序的时间复杂度名称稳定 否平均时间复杂度插入排序稳定n2冒泡排序稳定n2选择排序否n2归并排序稳定nlog2n希尔排序否n2快速排序... 阅读全文
posted @ 2014-10-30 11:49 神之一招 阅读(449) 评论(0) 推荐(0) 编辑
摘要:1. 贪婪算法通过局部尽可能达到最优(贪婪的名字由来), 从而实现整体的最优, 贪婪算法不一定总是正确的, 因为每个局部最优并不代表整体最优, 但是在某些时候, 它是正确.例如: 为了找出找出17美元61美分(用最少的纸币), 肯定是按照最大面额尽可能多得先找, 然后依次, 所以先找一个10美元的,... 阅读全文
posted @ 2014-06-05 21:04 神之一招 阅读(182) 评论(0) 推荐(0) 编辑
摘要:众所周知, 数据结构分为以下四个方面 :1. 集合 ( 结点之间没什么联系, 不需要总结 )2. 线性 ( 一条直线 )3. 树状 ( 类似家谱 )4. 图 ( 难, 暂时先不总结 )数据结构的定义: 分为结点的定义和结点之间关系的定义.线性结构- 顺序表typedef struct { int elem[100]; int length; // 这里的lenth是指当前分配的长度} SqList;由以上结构可以看出, 结点的值存储在 elem 中,而结点之间的关系就是数组隐含, 所以不需要另外在定义关系.- 单链表typedef struct LNode{ int elem; struct 阅读全文
posted @ 2013-03-20 08:38 神之一招 阅读(16369) 评论(0) 推荐(1) 编辑
摘要:链表头文件/* linkedlist.h */#ifndef LINKEDLIST_H#define LINKEDLIST_Htypedef struct node *link;struct node { unsigned char item; link next;};link make_node(unsigned char item);void free_node(link p);link search(unsigned char key);void insert(link p);void delete(link p);void traverse(void (*visit)(link));v 阅读全文
posted @ 2012-10-17 16:03 神之一招 阅读(247) 评论(0) 推荐(0) 编辑
摘要:1。定义一个指针类型的局部变量而没有初始化,例如 int *p ; *p = 0 ; 这两条语句,我们知道,在堆栈上分配的变量初始值是不确定的,也就是说,指针 p 所指向的内存地址是不确定的,即 野指针,*p 的意思是访问 p 所指向内存中的内容,这个是一个不确定的结果,所以要访问指针指向内存的结果,必须先对指针进行初始化,即 指向哪必须明确。好的习惯是,定义指针时,直接初始化 int *p = NULL ; 任何对地址0 即 NULL 的访问都会立刻导致段错误。 容易发现。2。 指针与 const 限定符const int * a; 与 int const *a; 是一样的。含义是,a 所指 阅读全文
posted @ 2012-10-17 15:32 神之一招 阅读(172) 评论(0) 推荐(0) 编辑
摘要:总结下边的内容 :文件中的第一个target是最终目标命令列表中的每条命令必须以 Tab 开头如果 prerequistes 中如果有一个以上的文件比 target 文件更新的话,command 所定义的命令就会执行,这就是 Makefile 规则如果这个工程的头文件改变了,那么我们需要编译引用了这个头文件的C文件,并链接目标程序。make clean 执行删除文件和所有中间文件。这里要说明,clean, 类似C语言中的 label一样,其冒号后什么也没有,那么,make就不会自动去找文件的依赖性,也就不会自动执行其后所定义的命令,要执行其后的命令,就要在make命令后明显得指出这个label 阅读全文
posted @ 2012-10-17 14:41 神之一招 阅读(3818) 评论(0) 推荐(0) 编辑
摘要:链接当多个文件同时被编译时,不同文件中的函数的使用,比如main中使用了其他文件的函数,那么这是有问题的。因为main不认识该函数解决以上问题的办法有2个,1) 用 extern 来声明别的文件中的函数或变量,而此时,如果多个文件需要该文件中的函数时,每个文件都要声明一次,这样不好。所以就引入第2种办法2)使用头文件,然后在使用到得地方加入 #include “stack.h”这样的话,就解决了以上问题,使用头文件时要注意,Header Guard,就是要避免头文件被多次的预处理。具体办法是使用宏。。。看以下例子Header Guard/* stack.h */#ifndef STACK_H# 阅读全文
posted @ 2012-10-17 08:25 神之一招 阅读(193) 评论(0) 推荐(0) 编辑
摘要:1。定义方法(简单,不推荐) struct { int x, y} point ; 这种定义结构体的方法,没有办法再次引用这个结构体了,因为它没有名字。只能是使用一个变量point了 2。struct point { int x, y} point1 ; ( 推荐 ) 这种方法可以直接使用变量 point1,并且向后,还可以使用 struct point point2 来定义变来那个。 可以在定义时,初始化,struct complex_struct z = {3.0, 4.0}; 但是如果不是在定义时,这种做法是错误的。例如 struct complex_struct z1 ; z1 = . 阅读全文
posted @ 2012-09-30 16:45 神之一招 阅读(228) 评论(0) 推荐(0) 编辑
摘要:数据结构,是数据的组织形式,包括存储方式和访问方式两层含义,二者是紧密联系的。例如,数组的各元素是一个挨一个存储的,并且每个成员的大小相同,因此数组可以通过下标访问的方式,结构体的各成员也是一个挨一个存储的,但是每个成员的大小不同,所以只能用.运算符加成员来访问,而不能按下标访问。一个问题中的存储方式和访问方式(即数据结构)就决定了解决问题可以采用说明样的算法。要设计一个算法就要同时设计相应的数据结构来支持这种算法。用数组实现堆栈(如果堆栈中存储类型相同)用数组实现栈/* * use [] implement stack * author : kevin * date : 2012.09.30 阅读全文
posted @ 2012-09-30 16:45 神之一招 阅读(300) 评论(0) 推荐(0) 编辑
摘要:1。插入排序插入排序#include <stdio.h>#define LEN 5int a[LEN] = {10, 5, 2, 4, 7};void insertion_sort(void){ int i, j, key; for (j=1; j<LEN; j++) { printf("%d,%d,%d,%d,%d\n", a[0], a[1], a[2], a[3], a[4]); key = a[j]; i = j - 1; /* move, find the location */ while (i>=0 && a[i]> 阅读全文
posted @ 2012-09-29 16:29 神之一招 阅读(211) 评论(0) 推荐(0) 编辑
摘要:调试程序的基本思想是 : 分析现象 –》 假设错误出现的原因 –》 产生新的现象去验证假设问题代码#include <stdio.h>int add_range(int low, int high){ int i, sum; for (i=low; i<=high; i++) sum = sum + i; return sum;}int main(void){ int result[100]; result[0] = add_range(1, 10); result[1] = add_range(1, 100); printf("result[0]=%d\nresu 阅读全文
posted @ 2012-09-28 16:34 神之一招 阅读(252) 评论(0) 推荐(0) 编辑
摘要:1。关键字 if, while, for 后有一个空格2。=号之类的双目运算符两侧都有空格3。后缀运算符和操作数之间不加空格 例如 s.a , foo(argu) , a[i]4。, 号和 ; 号之后要加空格,例如 foo(argu1, argu2) for (i=0; i<20; i++)5。关于双目运算符两侧加空格可以灵活规定,例如 distance = sqrt(x*x + y*y),突出结合方式6。如果程序需要换行,则要与上一行的表达式对齐 foo(sqrt(x*x + y*y)) a[i-1] + b[i-1] + c[i-1])7。较长的字符串可以段成多个字符串,并且要对齐 阅读全文
posted @ 2012-09-28 14:42 神之一招 阅读(400) 评论(0) 推荐(0) 编辑
摘要:Hello#include <stdio.h>int main (void){ printf("Hello, world!\n"); return 0;}gcc –Wall hello.c –o hello ( 其中 –Wall 打开所有常用到的编译警告,-o 输出文件名 )编译后,会生成名为hello的可执行文件,使用 ./hello,就可以运行文件,显示 “Hello, world!”编译多个文件顺便说一下,#include”file.h”和 include<file.h>前者是先在当前目录搜索”file.h”,然后再查看包含系统头文件的目录,后 阅读全文
posted @ 2012-09-26 18:21 神之一招 阅读(240) 评论(0) 推荐(0) 编辑