
C/C++
栖息
看得见的是做作,看不见的是执着
展开
-
指针的值
指针的值,或者叫指针所指向的内存区或地址 指针的值是指针本身存储的数值,这个值将被编译器当作一个地址,而不是一个一般的数值。在32位程序里,所有类型的指针的值都是一个32位整数,因为32位程序里内存地址全都是32位长。 指针所指向的内存区就是从指针的值所代表的那个内存地址开始,长度为sizeof(指针所指向的类型)的一片内存区。以后,我们说一个指针的值是XX,就相当于说该指针指向了以XX为首原创 2013-06-04 11:16:12 · 2584 阅读 · 0 评论 -
指针的概念
指针的概念 指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。 要搞清一个指针需要搞清指针的四方面的内容:指针的类型,指针所指向的 类型,指针的值或者叫指针所指向的内存区,还有指针本身所占据的内存区。让我们分别说明。 先声明几个指针放着做例子: 例一: (1)int*ptr; (2)char*ptr; (3)int**ptr原创 2013-06-04 11:11:27 · 1039 阅读 · 0 评论 -
指针和结构类型的关系
指针和结构类型的关系 可以声明一个指向结构类型对象的指针。 例十一: struct MyStruct { int a; int b; int c; } MyStruct ss={20,30,40};//声明了结构对象ss,并把ss的三个成员初始化为20,30和40。 MyStruct*ptr=&ss;//声明了一个指向结构对象s原创 2013-06-04 11:20:51 · 1119 阅读 · 0 评论 -
约瑟夫排序
问题:据说着名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人找到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从,Josephus要他原创 2013-06-06 15:21:21 · 1462 阅读 · 0 评论 -
插补搜寻法
说明如果却搜寻的资料分布平均的话,可以使用插补( Interpolation)搜寻法来进行搜寻,在搜寻的对象大于500时,插补搜寻法会比二分搜寻法来的快速。解法插补搜寻法是以资料分布的近似直线来作比例运算,以求出中间的索引并进行资料比对,如果取出的值小于要寻找的值,则提高下界,如果取出的值大于要寻找的值,则降低下界,如此不断的减少搜寻的范围,所以其本原则与二分搜寻法是相同的原创 2013-06-11 11:25:40 · 1366 阅读 · 0 评论 -
蛇形填数
描述在n*n方陈里填入1,2,...,n*n,要求填成蛇形。例如n=4时方陈为:10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4#include#include#define MAX 10int a[MAX][MAX];int main(){ int n,x,y,tot=0; scanf("%d"原创 2013-05-01 21:22:33 · 746 阅读 · 0 评论 -
魔方算法
#include#include#define MAXSIZE 20#define MARK -1#define SWAP(x,y) {int t;t=x;x=y;y=t;}void Magic_o(int matrix[MAXSIZE][MAXSIZE],int n); /*单奇数阶*/void Magic_se(int matrix[MAXSIZE][MAXSIZE原创 2013-04-30 19:13:56 · 995 阅读 · 0 评论 -
IO-同步、异步、阻塞、非阻塞
1.同步与异步所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才有可能完成(当然我们可以根据事务回滚、数据恢复等使之成为一种可靠的任务序列:要成功都成功,要失败都失败,两个任务的状态保持一致);异步不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务不需要等待其完成,即可立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最原创 2013-08-17 00:50:25 · 2275 阅读 · 1 评论 -
两个运算符
运算符&和* 这里&是取地址运算符,*是...书上叫做"间接运算符"。 &a的运算结果是一个指针,指针的类型是a的类型加个*,指针所指向的类型是a的类型,指针所指向的地址嘛,那就是a的地址。 *p的运算结果就五花八门了。总之*p的结果是p所指向的东西,这个东西有这些特点:它的类型是p指向的类型,它所占用的地址是p所指向的地址。 例五: int a=12; in原创 2013-06-04 11:18:42 · 1070 阅读 · 0 评论 -
指针类型转换
指针类型转换 当我们初始化一个指针或给一个指针赋值时,赋值号的左边是一个指针,赋值号的右边是一个指针表达式。在我们前面所举的例子中,绝大多数情况下,指针的类型和指针表达式的类型是一样的,指针所指向的类型和指针表达式所指向的类型是一样的。 例十四: 1、float f=12.3; 2、float*fptr=&f; 3、int*p; 在上原创 2013-06-04 11:25:50 · 2137 阅读 · 1 评论 -
Code::Blocks乱码
Code::Blocks10.05缺省文件编码是UTF-8从菜单Settings->Compiler and debugger->Compiler setting->Other Option,添加下面的设定 -fexec-charset=GBK -finput-charset=UTF-8第一个参数表示编译的时候输入文件的编码解释格式,第二参数表示生成的执行文件执行的时候显示用的编码格式原创 2013-05-01 21:31:30 · 814 阅读 · 0 评论 -
冒泡、选择、插入排序
选择排序(Selection sort)、插入排序(Insertion sort)与气泡排序(Bubble sort)这三个排序方式是初学排序所必须知道的三个基本排序方式。选择排序将要排序的对象分作两部份,一个是已排序的,一个是未排序的,从后端未排序部份选择一个最小值,并放入前端已排序部份的最后一个,插入排序像是玩朴克一样,我们将牌分作两堆,每次从后面一堆的牌抽出最前端原创 2013-06-10 08:27:36 · 1740 阅读 · 2 评论 -
堆排序(改良的选择排序)
#include #include #include #define MAX 10#define SWAP(x,y) {int t; t = x; x = y; y = t;}void createheap(int[]);void heapsort(int[]);int main(void){ int number[MAX+1] = {-1};原创 2013-06-10 15:38:52 · 1232 阅读 · 0 评论 -
费氏搜寻法
说明二分搜寻法每次搜寻时,都会将搜寻区间分为一半,所以其搜寻时间为O(log(2)n),log(2)表示以2为底的log值,这边要介绍的费氏搜寻,其利用费氏数列作为间隔来搜寻下一个数,所以区间收敛的速度更快,搜寻时间为O(logn)。解法费氏搜寻使用费氏数列来决定下一个数的搜寻位置,所以必须先制作费氏数列,这在之前有提过;费氏搜寻会先透过公式计算求出第一个要搜寻数的位置,以原创 2013-06-11 11:43:33 · 1827 阅读 · 0 评论 -
快速排序法(三)
说明之前说过轴的选择是快速排序法的效率关键之一,在这边的快速排序法的轴选择方式更加快了快速排序法的效率,它是来自演算法名书 Introduction to Algorithms之中。解法先说明这个快速排序法的概念,它以最右边的值 s作比较的标准,将整个数列分为三个部份,一个是小于s的部份,一个是大于s的部份,一个是未处理的部份,如下所示: 小于S 大于S 未原创 2013-06-11 10:16:53 · 1601 阅读 · 0 评论 -
快速排序法(一)
说明快速排序法(quick sort)是目前所公认最快的排序方法之一,快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。这是第一个快速排序法版本,是在多数的教科书上所提及的版本,因为它最容易理解,也最符合轴心分割与左右进行排序的概念,适合对初学者学习。 解法这边所介绍的快速演算如下:将最左边的数原创 2013-06-11 09:05:12 · 1250 阅读 · 0 评论 -
快速排序法(二)
说明在快速排序法(一)中,每次将最左边的元素设为轴,而之前曾经说过,快速排序法的加速在于轴的选择,在这个例子中,只将轴设定为中间的元素,依这个元素作基准进行比较,这可以增加快速排序法的效率。 解法在这个例子中,取中间的元素s作比较,同样的先得右找比s大的索引i,然后找比s小的索引 j,只要两边的索引还没有交会,就交换 i与 j的元素值,这次不用再进行轴的交换了,因为在寻原创 2013-06-11 09:23:53 · 1027 阅读 · 0 评论 -
合并排序
说明之前所介绍的排序法都是在同一个阵列中的排序,考虑今日有两笔或两笔以上的资料,它可能是不同阵列中的资料,或是不同档案中的资料,如何为它们进行排序?解法可以使用合并排序法,合并排序法基本是将两笔已排序的资料合并并进行排序,如果所读入的资料尚未排序,可以先利用其它的排序方式来处理这两笔资料,然后再将排序好的这两笔资料合并。如果两笔资料本身就无排序顺序,何不将所有的资料读入,再原创 2013-06-11 10:59:23 · 1215 阅读 · 0 评论 -
shell(希尔)排序(改良的插入排序)
说明插入排序法由未排序的后半部前端取出一个值,插入已排序前半部的适当位置,概念简单但速度不快。排序要加快的基本原则之一,是让后一次的排序进行时,尽量利用前一次排序后的结果,以加快排序的速度,Shell排序法即是基于此一概念来改良插入排序法。解法Shell排序法最初是D.LShell于1959所提出,假设要排序的元素有n个,则每次进行插入排序时并不是所有的元素同时进行时,而是原创 2013-06-10 15:19:53 · 1039 阅读 · 0 评论