摘要:
题目:输入一个链表的头结点,反转该链表,并返回反转后链表的头结点。链表结点定义如下:structListNode{int m_nKey; ListNode* m_pNext;};分析:这是一道广为流传的微软面试题。由于这道题能够很好的反应出程序员思维是否严密,在微软之后已经有很多公司在面试时采用了这道题。为了正确地反转一个链表,需要调整指针的指向。与指针操作相关代码总是容易出错的,因此最好在动手写程序之前作全面的分析。在面试的时候不急于动手而是一开始做仔细的分析和设计,将会给面试官留下很好的印象,因为在实际的软件开发中,设计的时间总是比写代码的时间长。与其很快地写出一段漏洞百出的代码,远不如用 阅读全文
posted @ 2014-02-20 22:55
yulang
阅读(1759)
评论(0)
推荐(0)
摘要:
#include#includemain(){ char str[100]; int n; printf("input string:"); gets(str); n=strlen(str); for(;n>=0;n--)printf("%c",str[n]); getch()();} 阅读全文
posted @ 2014-02-20 22:50
yulang
阅读(205)
评论(0)
推荐(0)
摘要:
简单选择排序的基本思想:第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它与r[1]交换;第2趟,在待排序记录r[2]~r[n]中选出最小的记录,将它与r[2]交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。void SelectSort(RecordType r[], int length) /*对记录数组r做简单选择排序,length为待排序记录的个数*/{for ( i=1 ; i< length; i++) //n-1趟排序{int index=i; //假设index是最小的for ( j= 阅读全文
posted @ 2014-02-20 22:42
yulang
阅读(170)
评论(0)
推荐(0)
摘要:
一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:⒈ 从第一个元素开始,该元素可以认为已经被排序⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置⒌ 将新元素插入到下一位置中⒍ 重复步骤2~5如果比较操作的代价比交换操作大的话,可以采用二分查找法来减少比较操作的数目。该算法可以认为是插入排序的一个变种,称为二分查找排序。void insertion_sort(int array[],int first,int last){int i,j;int temp 阅读全文
posted @ 2014-02-20 22:37
yulang
阅读(138)
评论(0)
推荐(0)
摘要:
1 比较相邻的元素。如果第一个比第二个大,就交换他们两个。2 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数3 针对所有的元素重复以上的步骤,除了最后一个4 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较#include #define SIZE 8void bublle_sort(int a[],int n) //n为数组a的元素个数{int i,j,temp;for(j=0;j a[i+1]) //数组元素大小按升序排列{temp = a[i];a[i] = a[i+1];a[i+1] = temp;}}int mai 阅读全文
posted @ 2014-02-20 22:23
yulang
阅读(196)
评论(0)
推荐(0)
摘要:
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]赋给A[i];4)从i开始向后搜索, 阅读全文
posted @ 2014-02-20 22:19
yulang
阅读(160)
评论(0)
推荐(0)
摘要:
C++基础遗漏:new和delete我记得当年学习C++基础的时候,老师曾经告诉我们:一般来说new和delete要成对出现,在使用完new申请的内存后要马上释放。我相信持这种说法的人不止我们老师一个人,养成良好的内存使用习惯固然重要,但如果因此就认为new和delete必须成对出现,使用完new得到的空间后就要马上用delete释放的话,就有点“大材小用”了,相信C++提供这一由用户控制的内存控制方法也不是只限于如此的使用方法。正确灵活的,或许也是“高级”的使用方法,是在A处使用new申请一块内存,用一个指针指pA向它,之后在B处用指针pB指向pA所指向的空间,释放指针pA本身,接着释放pB 阅读全文
posted @ 2014-02-20 21:32
yulang
阅读(208)
评论(0)
推荐(0)
摘要:
在C#、Java這種managed語言,因為有garbage collection,所以完全不用考慮free()或delete,但在C/C++,有時候要delete的,有時又不用,到底哪些改delete?哪些不用delete呢?簡單的說,若要使用用到heap,就要手動去delete或free()!!那什麼時候會用到heap呢?當你打算使用dynamic allocation時!!更白話一點,就是你用new或malloc()時,就必須自己手動去delete或free()!!為什麼用到heap就必須手動處理呢?一般我們建立物件,如1inti;2Foofoo;都是建在stack上,回想我們學資料結構 阅读全文
posted @ 2014-02-20 21:31
yulang
阅读(242)
评论(0)
推荐(0)
浙公网安备 33010602011771号