![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
「已注销」
这个作者很懒,什么都没留下…
展开
-
尾插法建立链表--顺序输出
#include#include#include#define OK 0#define ERROR -1typedef char elemtype;typedef struct node { elemtype data; struct node *原创 2011-09-29 20:37:08 · 1659 阅读 · 0 评论 -
const char *p,char * const p,char const *p 的区别
区别这些,可以根据const离那个变量的距离最近加以区分:指向常量的指针:const char *p 显然和char const *p一样,都可以等价于const (char *p),它的意思是把char *p声明为常量,不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向其他的对象。#includeusing namespace std;int main (){原创 2011-11-13 21:39:52 · 713 阅读 · 0 评论 -
函数指针和指针函数的区别
【函数指针】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可转载 2011-11-13 21:32:59 · 625 阅读 · 0 评论 -
break和 continue
break:使程序从最内层循环体和switch语句内调出来,结束循环。继续执行逻辑上的下一条语句。continue:结束本次循环,接着执行下一次循环,只能出现在for, while, do循环中 例:1 #include 2 int main () 3 { 4 int i; 5 for (i = 0; i 6 { 7原创 2011-11-13 21:42:10 · 481 阅读 · 0 评论 -
选择排序之----简单选择排序
选择排序是指每次从待排序的记录中选出关键字值最小(或最大)的记录,顺序放在已排序的子序列的后面,直到全部排完。简单选择排序的基本思路:1.查找待排序序列中最小的记录,并将它和该区间第一个记录交换;2.重复1,直到第n-1躺排序结束。简单选择排序是不稳定的排序。#include#define Type intvoid select_sort(Type *buf, in原创 2011-12-04 16:14:46 · 904 阅读 · 0 评论 -
选择排序之----堆排序
堆排序是简单选择排序的改进,是一种不稳定的排序方法。基本思路:对一组待排序的记录序列,先将其关键字按堆的定义排列一个序列(称为初建堆),找到最小(最大)关键字后,将其取出。用剩余的n-1个元素再重建堆,便可得到次小(次大)值。如此反复执行,直到全部关键字排好序为止。#include#define Type int#define MARK 0 //占据a[0],不起实际作原创 2011-12-07 18:27:12 · 751 阅读 · 0 评论 -
排序算法的集锦
排序是将一个数据元素的任意序列,重新排列成一个按关键字有序排列的序列。基本术语:关键字:数据元素中某一数据项的值。内部排序是排序的基础,根据排序过程中所依据的原则可以分为:插入排序,交换排序,选择排序,归并排序和基数排序。 1. 调用qsort()的排序函数2.插入排序直接插入排序shell排序3.交换排序冒泡排序法快速排序4.选择排序简单选原创 2011-12-07 22:00:35 · 602 阅读 · 0 评论 -
算法与数据结构注意----待续
少乘除,多移位;少while,多for。原创 2011-12-07 19:42:57 · 425 阅读 · 0 评论 -
归并排序之----递归
以下代码来自维基百科:采用递归的思想,实现归并排序。归并是指把两个或者多个有序表进行合并,得到一个新的有序表。将两个有序子表合并成一个有序表,称为二路归并。 #include #include #include #include #define Type int#define NUM 12#define Num NUM-1void print(Type A原创 2011-12-07 20:18:02 · 585 阅读 · 0 评论 -
对C程序设计中swap的再次理解
附代码如下:#includevoid swap1(int a, int b){ int temp; temp = a; a = b; b = temp; printf("%d,%d\n",a,b);}void swap2(int *x, int *y){ int temp; temp = *x; *x = *y; *y = temp; printf("%d,%原创 2012-03-14 15:50:58 · 1139 阅读 · 0 评论 -
插入排序之----直接插入排序
直接插入排序是稳定的排序方法。基本思路:依次把待排序的记录逐一按其关键字的大小插入到一个已经排好序的有序序列中去,直到所有的记录插完位置,得到一个新的有序序列。算法的思路:1.设置监视哨x,将待排序的数据赋给x,对于整个数组的排序而言,一般选第二个数据;2.设置开始查找的位置j = i - 1;3.在数组中先前扫描,扫描中将第j个记录后移,并且j--,为下一次循环做准备,直到x原创 2011-12-04 10:43:23 · 1046 阅读 · 4 评论 -
插入排序之----shell排序
shell排序是插入排序的一种,在时间效率上有较大的改进。是一种不稳定的排序方法。基本思想:选定第一个增量d1 算法的思路:shell排序算法通过三重循环实现;1.外循环以各种不同的间隔距离d进行循环,直到d=1为止。2.第二重循环是在某一个d值下对所分的组进行组循环3.第三重循环是对第二重循环中所分的每个组,进行组内循环。 算法实现:#include#原创 2011-12-04 11:08:31 · 809 阅读 · 0 评论 -
交换排序之----冒泡排序法
冒泡排序(bubble sort)属于交换排序的类型,它从数组的一端开始,依次对相邻两元素进行比较,当发现它们不合顺序时就进行依次交换。冒泡排序是稳定的。排序的稳定性是指相等的二个数经排序后这两个数的相对位置不变。程序实现如下:#include#include#define Type int //要转换的数组类型,可以为char ,int,但是注意对 //main原创 2011-12-02 11:14:46 · 826 阅读 · 0 评论 -
头插法建立链表--逆序输出
#include#include#include#define OK 1;#define ERROR -1;typedef char elemdata;typedef struct node {elemdata data;struct node *原创 2011-09-29 20:38:51 · 2614 阅读 · 0 评论 -
栈--顺序储存结构
栈是线性表的一种。首先,其逻辑结构是线性结构;其次,栈的基本操作只是线性表操作的子集。栈(stack)是限定仅在表的一端进行插入和删除的线性表。允许插入和删除的一端称为栈顶(top),不允许插入和删除的一端称为栈底(bottom)。其特点是last-in-first-原创 2011-09-30 15:56:05 · 543 阅读 · 0 评论 -
signal函数详解
c traps and pitfalls 对signal函数解释得非常详细。 中 void ( *signal( int sig, void (* handler)( int ))) ( int );int (*p)();这是一个函数指针, p所指向的函数是一个不带任何参数, 并且返回值为int的一个函数.int (*fun())();这个式子与上面式子的区别在于转载 2011-11-13 21:52:22 · 1303 阅读 · 0 评论 -
Virtaul box 中安装xp
准备工作:安装了vbox的win7家庭普通版 1、挂载chostxp的光盘到光驱,当然是虚拟机的光驱,启动虚拟机,可以看到光盘的启动菜单:2、选择“PM 8.05分区工具”,出现如下软件界面:3、右击未分配的空间,选择“建立”:4、第一个下拉框,选择“主要分割磁区”5、如果你希望有多个硬盘分区,在下边设置一个你希望的磁盘大小。6、单击“确定”,回到P转载 2011-11-01 20:05:15 · 929 阅读 · 0 评论 -
different of strlen() and sizeof()
strlen(char *)是一个函数,是字符串的实际长度,它求得方法是从开始到遇到第一个'\0'为止。注意它接受的参数只能为char *,否则导致出错。sizeof()函数返回的是变量声明后所占的内存数,不是实际长度。sizeof操作符返回这个指针占的空间,一般是4个字节sizeof typename :这种形式是不正确的,只有在sizeof 后是声明的变量名时才可以省略。在对c原创 2011-11-22 09:40:44 · 433 阅读 · 0 评论 -
循环链表
循环链表的特点是从任意结点出发都能找到表中其他结点。循环链表为空表时:h->next = h; 结束的条件为:p->next = h。 (图片来自百度)//项目:循环链表//时间:2011-9-30 #include"lklist_1.c" int main(){ linklist taillist; int j = 1, count原创 2011-09-29 20:58:32 · 619 阅读 · 0 评论 -
双向链表
双向链表的结点中有两个指针域:直接后继(next)和直接前驱(prior)。空双向链表的判定:h->next = h->prior = h;双向链表的结束判定:p->next = h。 #include#include#include#define OK 0#define ERROR -1typedef char elemtype;typedef str原创 2011-09-29 21:22:07 · 514 阅读 · 0 评论 -
调用qsort()的排序函数
qsort(void * buf, size_t num, size_t size, int(*compare)(const void *,const void *)),其中buf指向要排序的数组,num是数组中元素的个数,size是数组中每个元素的大小,一般用sizeof(数组的类型)来获取,compare指向的函数用于比较数组的两个元素的大小。它包含在中。#include#incl原创 2011-12-02 10:16:49 · 914 阅读 · 0 评论 -
交换排序之----快速排序
快速排序是对冒泡排序的改进,是基于比较的内部排序方法中速度最快,也因此而得名。基本思路:在待排序的数据中,任选一数据作为基准(通常选取第一个数据),把所有数据分为大于此数据和小余此数据的两部分,结束后此数据位于这两部分的中间,并且不再参与排序,这样就完成了一次排序;对所分的前后两部分重新应用此方法进行排序。因此,整个排序的过程要用到递归算法。递归算法:解决问题时,把一个问题转换为一个新问题原创 2011-12-02 16:41:42 · 751 阅读 · 0 评论 -
类型void* 说明了什么样的返回值
void有两种用法:1.将无返回值的函数定义为void类型,表示函数没有返回值2.用void*定义指针,这是一个指向非具体数据类型的指针,称为无类型指针,或者通用型的指针变量,一般在使用的时候通过强制转化,可以给其他类型的指针变量赋值。 例如:NULL不是被定义为0,就是被定义为(void*)0,这两种值几乎是相同的。当程序中需要一个指针时,一个纯粹的0或者一个void指针都能自动原创 2011-11-13 10:52:28 · 6587 阅读 · 0 评论 -
kmalloc vmalloc kzalloc malloc 和 get_free_page()
http://www.360doc.com/content/11/1201/10/1317564_168823219.shtml转载 2012-03-30 21:53:35 · 839 阅读 · 0 评论