自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 希尔排序

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位算法实现原始的算法实现在最坏的情况下需要进行O(n2)的比较和交换。V. P...

2013-12-18 15:40:00 410

转载 无向图的邻接多重表存储

/* c7-4.h 无向图的邻接多重表存储表示 */ #define MAX_VERTEX_NUM 20 typedef enum{unvisited,visited}VisitIf; typedef struct EBox { VisitIf mark; /* 访问标记 */ int ivex,jvex; /* 该边依附的两个顶点的位置 */ ...

2013-12-18 13:51:00 435

转载 有向图的十字链表存储

/* c7-3.h 有向图的十字链表存储表示 */ #define MAX_VERTEX_NUM 20 typedef struct ArcBox { int tailvex,headvex; /* 该弧的尾和头顶点的位置 */ struct ArcBox *hlink,*tlink; /* 分别为弧头相同和弧尾相同的弧的链域 */ InfoTy...

2013-12-18 13:49:00 311

转载 图的邻接表存储

/* c7-2.h 图的邻接表存储表示 */ #define MAX_VERTEX_NUM 20 typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网} */ typedef struct ArcNode { int adjvex; /* 该弧所指向的顶点的位置 */ struct ArcNo...

2013-12-18 13:45:00 227

转载 图的邻接矩阵存储

/* c7-1.h 图的数组(邻接矩阵)存储表示 */ #define INFINITY INT_MAX /* 用整型最大值代替∞ */ #define MAX_VERTEX_NUM 20 /* 最大顶点个数 */ typedef enum{DG,DN,AG,AN}GraphKind; /* {有向图,有向网,无向图,无向网}*/typedef struct { ...

2013-12-18 13:42:00 193

转载 树的二叉链表(孩子-兄弟)存储

/* c6-5.h 树的二叉链表(孩子-兄弟)存储表示 */ typedef struct CSNode { TElemType data; struct CSNode *firstchild,*nextsibling; }CSNode,*CSTree; /* bo6-5.c 树的二叉链表(孩子-兄弟)存储(存储结构由c6-5.h定义)的基本...

2013-12-18 13:37:00 399

转载 树的双亲表存储

/* c6-4.h 树的双亲表存储表示 */ #define MAX_TREE_SIZE 100 typedef struct { TElemType data; int parent; /* 双亲位置域 */ } PTNode; typedef struct { PTNode nodes[MAX_TREE_SIZE]; in...

2013-12-18 13:36:00 100

转载 二叉树的二叉线索存储

/* c6-3.h 二叉树的二叉线索存储表示 */ typedef enum{Link,Thread}PointerTag; /* Link(0):指针,Thread(1):线索 */ typedef struct BiThrNode { TElemType data; struct BiThrNode *lchild,*rchild; /* 左右孩子指...

2013-12-18 10:31:00 135

转载 二叉树的二叉链表存储

/* c6-2.h 二叉树的二叉链表存储表示 */ typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; /* 左右孩子指针 */ }BiTNode,*BiTree; /* bo6-2.c 二叉树的二叉链表存储(存储结构由c6-2.h定义)的基本操作(...

2013-12-18 10:16:00 272

转载 二叉树的顺序存储

/* c6-1.h 二叉树的顺序存储表示 */ #define MAX_TREE_SIZE 100 /* 二叉树的最大结点数 */ typedef TElemType SqBiTree[MAX_TREE_SIZE]; /* 0号单元存储根结点 */ typedef struct { int level,order; /* 结点的层,本层序号(按满二叉树计...

2013-12-18 10:12:00 119

转载 串的块链存储表示

/* c4-3.h 串的块链存储表示 */ #define CHUNKSIZE 4 /* 可由用户定义的块大小 */ typedef struct Chunk { char ch[CHUNKSIZE]; struct Chunk *next; }Chunk; typedef struct { Chunk *head,*tail; /*...

2013-12-18 10:10:00 385

转载 串的堆分配存储

/* c4-2.h 串的堆分配存储 */ typedef struct { char *ch; /* 若是非空串,则按串长分配存储区,否则ch为NULL */ int length; /* 串长度 */ }HString; /* bo4-2.c 串采用堆分配存储结构(由c4-2.h定义)的基本操作(15个) */ /* 包括算法4.1、4...

2013-12-18 10:05:00 209

转载 串的定长顺序存储表示

/* c4-1.h 串的定长顺序存储表示 */ #define MAXSTRLEN 40 /* 用户可在255以内定义最大串长(1个字节) */ typedef char SString[MAXSTRLEN+1]; /* 0号单元存放串的长度 */ /* bo4-1.c 串采用定长顺序存储结构(由c4-1.h定义)的基本操作(14个) */ /* SStri...

2013-12-18 00:21:00 279

转载 顺序队列

/* c3-3.h 队列的顺序存储结构(可用于循环队列和非循环队列) */ #define MAXQSIZE 5 /* 最大队列长度(对于循环队列,最大队列长度要减1) */ typedef struct { QElemType *base; /* 初始化的动态分配存储空间 */ int front; /* 头指针,若队列不空,指向队列头元素 */ ...

2013-12-17 23:49:00 79

转载 单链队列

/* c3-2.h 单链队列--队列的链式存储结构 */ typedef struct QNode { QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front,rear; /* 队头、队尾指针 */ }LinkQue...

2013-12-17 23:48:00 133

转载 栈的顺序存储表示

/* c3-1.h 栈的顺序存储表示 */ #define STACK_INIT_SIZE 10 /* 存储空间初始分配量 */ #define STACKINCREMENT 2 /* 存储空间分配增量 */ typedef struct SqStack { SElemType *base; /* 在栈构造之前和销毁之后,base的值为NULL */ ...

2013-12-17 23:46:00 218

转载 双向循环链表

/* c2-4.h 线性表的双向链表存储结构 */ typedef struct DuLNode { ElemType data; struct DuLNode *prior,*next; }DuLNode,*DuLinkList; /* bo2-5.c 双链循环线性表(存储结构由c2-4.h定义)的基本操作(14个) */ Status...

2013-12-17 23:44:00 103

转载 单循环链表的表示和实现

/* bo2-4.c 设立尾指针的单循环链表(存储结构由c2-2.h定义)的12个基本操作 */ Status InitList_CL(LinkList *L) { /* 操作结果:构造一个空的线性表L */ *L=(LinkList)malloc(sizeof(struct LNode)); /* 产生头结点,并使L指向此头结点 */ if(!*L) /*...

2013-12-17 23:43:00 175

转载 线性表的单链表表示和实现

/* c2-2.h 线性表的单链表存储结构 */ struct LNode { ElemType data; struct LNode *next; }; typedef struct LNode *LinkList; /* 另一种定义LinkList的方法 */ /* bo2-2.c 单链表线性表(存储结构由c2-2.h定义)的基本操作...

2013-12-17 23:39:00 108

转载 线性表的顺序表示和实现

/* c2-1.h 线性表的动态分配顺序存储结构 */ #define LIST_INIT_SIZE 10 /* 线性表存储空间的初始分配量 */ #define LISTINCREMENT 2 /* 线性表存储空间的分配增量 */ typedef struct { ElemType *elem; /* 存储空间基址 */ int length; /...

2013-12-17 23:37:00 101

转载 抽象数据类型的表示与实现

/* f.c 用函数指针代替C++的引用参数 */ #include<stdio.h> void fa(int a) /* 在函数中改变a,将不会带回主调函数(主调函数中的a仍是原值) */ { a=5; printf("在函数fa中:a=%d\n",a); } void fb(int *a) /* a为指针类型,在函数中改变*a...

2013-12-17 23:33:00 142

转载 (Problem 36)Double-base palindromes

The decimal number, 585 = 10010010012(binary), is palindromic in both bases.Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2.(Please note that ...

2013-10-31 21:39:00 93

转载 C语言中do...while(0)的妙用

在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个:1、避免goto语句:通常,如果一个函数开始要分配一些资源,然后如果在中途遇到错误则要退出函数,当然,退出前要释放资源,我们的代码可能如下:  1 #defien N 10 2 3 bool Execute() 4 { 5 // ...

2013-10-25 13:51:00 790

转载 C语言中scanf函数的实现

接上一篇C语言中可变参数函数实现原理,从理论上详细介绍了C语言中可变参数函数的实现,这一篇从minix内核源码中的scanf函数入手,学习C语言经典可变参数函数的实现过程在scanf.c文件中,可以看到scanf函数,代码如下:#include <stdio.h>#include <stdarg.h>#include "loc...

2013-10-19 01:10:00 712

转载 stdarg.h头文件源代码分析

谈到C语言中可变参数函数的实现(参见C语言中可变参数函数实现原理),有一个头文件不得不谈,那就是stdarg.h本文从minix源码中的stdarg.h头文件入手进行分析: 1 #ifndef _STDARG_H 2 #define _STDARG_H 3 4 5 #ifdef __GNUC__ 6 /* The GNU C-compiler us...

2013-10-18 00:05:00 280

转载 C语言中可变参数函数实现原理

C函数调用的栈结构可变参数函数的实现与函数调用的栈结构密切相关,正常情况下C的函数参数入栈规则为__stdcall, 它是从右到左的,即函数中的最右边的参数最先入栈。例如,对于函数: void fun(int a, int b, int c) { int d; ... }其栈结构为 0x1ffc-->...

2013-10-17 00:59:00 316

转载 C语言内存对齐详解(3)

接上一篇:C语言内存对齐详解(2)在minix的stdarg.h文件中,定义了如下一个宏:/* Amount of space required in an argument list for an arg of type TYPE. * TYPE may alternatively be an expression whose type is used. */...

2013-10-15 02:47:00 86

转载 C语言内存对齐详解(2)

接上一篇:C语言内存对齐详解(1) VC对结构的存储的特殊处理确实提高CPU存储变量的速度,但是有时候也带来了一些麻烦,我们也屏蔽掉变量默认的对齐方式,自己可以设定变量的对齐方式。VC 中提供了#pragma pack(n)来设定变量以n字节对齐方式。n字节对齐就是说变量存放的起始地址的偏移量有两种情况:第一、如果n大于等于该变量所占用的字节数,那么偏移量必须满足默认的对齐方式...

2013-10-15 00:22:00 103

转载 C语言内存对齐详解(1)

一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定...

2013-10-14 21:41:00 94

转载 C99中的变长数组(VLA)

处理二维数组的函数有一处可能不太容易理解,数组的行可以在函数调用的时候传递,但是数组的列却只能被预置在函数内部。例如下面这样的定义:#define COLS 4int sum3d(int ar[][COLS], int rows){ int r, c, tot; tot = 0; for(r = 0; r < rows; r++)...

2013-10-14 14:42:00 397

转载 C程序设计语言习题(3-3)

编写函数expand(s1,s2), 将字符串s1中类似于a-z一类的速记符号在字符串s2中扩展为等价的完整列表abc……xyz。该函数可以处理大小写字母和数字,并可以处理a-b-c、a-z0-9与a-z等类似的情况。作为前导和尾随的字符原样复制 1 #include<stdio.h> 2 #include<ctype.h> 3 #include&...

2013-10-14 01:54:00 96

转载 C程序设计语言习题(3-5)

编写函数itob(n,s,b),将整数n转换为以b为底的数,并将转换结果以字符的形式保存到字符串s中。e.g.itob(n,s,16)把整数n格式化为十六进制整数保存在s中。 1 #include<stdio.h> 2 #include<ctype.h> 3 #include<string.h> 4 5 void swap(c...

2013-10-14 01:53:00 136

转载 C程序设计语言习题(1-12)

统计行数、单词数,字符数的程序: 1 #include<stdio.h> 2 3 #define IN 1 /*在单词内*/ 4 #define OUT 0 /*在单词外*/ 5 6 int main() 7 { 8 int c, nl, nw, nc, state; 9 10 state =...

2013-10-14 01:35:00 119

转载 minix中二分查找bsearch的实现

在看minix中bsearch实现的源代码之前,先学习一下C 语言中void类型以及void*类型的使用方法与技巧。void的含义:void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:void a;这行语句编译时会出错,提示...

2013-10-14 00:56:00 94

转载 minix中atoi、atol、atof的实现

在minix2.0源代码中,有将字符串类型转换为int、long、double类型的函数实现,相关的实现函数分别在atoi.c、atol.c、atof.c文件中,我们来逐一学习其中的源码:1、int atoi(register const char *nptr) :将字符串类型转换为int类型int atoi(register const char *nptr){...

2013-10-14 00:49:00 94

转载 minix中时间转换的实现(asctime.c)

在minix2.0源代码中,有相当经典的时间转换函数实现(src\ src\ lib\ ansi\ asctime.c),今天我们就来分析一下asctime.c中的源码首先引入几个相关的头文件:1、time.h 主要的结构体与相关定义:struct tm { int tm_sec; /* 分钟后面的秒[0, 59] */ int tm_m...

2013-10-14 00:46:00 107

转载 折半插入排序

基本概念折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。算法思想在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域的首元素设置为a[low],末元...

2013-10-09 12:25:00 163

转载 直接插入排序

直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。3....

2013-10-09 11:41:00 107

转载 C语言assert()函数用法总结

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义:#include <assert.h>void assert( int expression );assert的作用是现计算表达式 expression ,如果其值为假(即为0),那么它先向stderr打印一条出错信息,然后通过调用 abo...

2013-10-04 23:58:00 988

转载 C语言递归练习

1、炮弹一样的球状物体,能够堆积成一个金字塔,在顶端有一个炮弹,它坐落在一个4个炮弹组成的层面上,而这4个炮弹又坐落在一个9个炮弹组成的层面上,以此类推。写一个递归函数CannonBall,这个函数把金字塔的高度作为参数,并且返回它所包括的炮弹数量。函数必须按照递归方式实现,不可以使用迭代结构,例如while或for。 1 int CannonBall(int h) 2 ...

2013-10-02 16:44:00 248

空空如也

空空如也

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

TA关注的人

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