- 博客(13)
- 资源 (39)
- 收藏
- 关注
原创 插入排序:直接插入、交换插入、折半插入
插入排序:把一个数插入到一个有序的序列中,并要求插入后此数据序列仍然有序。这种排序思想就是插入排序。 那么对于一个原始无序的序列,哪里找有序的部分呢?这个很简单,可以把序列分为两个部分,第一个元素是第一部分,其余元素是第二部分。第一个部分只有一个元素,当然是有序的!对于如何把其余元素插入到第一部分中去,按插入策略,可分为如下几种插入方法:
2014-05-28 21:13:38 17070 2
原创 栈的应用:解析算术表达式
类似于 1*2-3+4-(5-6)-2/4 的式子,我们称为算术表达式。下面我们利用栈这种数据结构来解析它,即用栈来辅助计算算术表达式。首先我们得明确计算规则:先左后右:从左算到右先乘除,后加减先括号内,后括号外原理:
2014-05-27 14:06:54 6364 3
原创 链表常见操作:环、倒数第k个、是否相交
链表常见操作:判断是否有环链表中很常见的一问题是,是否有环?如下图:怎么办呢?正常链表的尾节点的链域是NULL,有环就不存在NULL了!对了,用一指针轮询,不断地 p=p->next; 若是看到了p为NULL,则表明无环!否则,就是有环。这个想法挺好,但是有环,会进入死循环的。有人说,那就设置一时间点,过了时间还没结束,就是有环。我想说,那万一链表真的很长呢,时间点设置多少才够了?……办法是有的:使用两指针,一快一慢,都从头开始轮询,若有环,则慢的肯定可以被快的反超,因为此时大家都像是在围绕着环形跑
2014-05-24 17:27:37 2100 1
原创 栈的实现:顺序栈
栈(stack)是一种很常见的线性结构。它是只允许在一端进行插入和删除操作的线性表,这一端我们称为栈顶。栈的特点常被称为:先进后出(filo-first int last out),或者是后进先出(lifo-last in first out)。这个描述从它的操作特点可以看出,只许在一端进行插入,那么显然,先进的肯定后出。栈的应用,比如系统应用栈来实现递归,图的深度遍历使用了栈,递归要用到栈……。说到它的实现就有两种形式:顺序栈、链栈。其中以顺序栈最为常见。栈的常见操作:
2014-05-24 12:17:24 6864 1
原创 链表常见操作:有序链表合并去重
两个升序链表合并,并要求去掉重复元素 。分析:如何使链表本身是有序的,这个我们可以在加入元素的过程中做到合并,并去掉重复元素,这个是难点思路:主要思想类似于直接插入排序和归并排序。指针p指向list1,指针q指向list2,由于list1已经有序,我们只需要把q指向的节点插入一个原本有序的表,这不就是直接插入排序算法吗?当然,得把p移动到合适位置。再由于list2也已经有序,因此插入过程中p不需回溯,只需不断地往后移动,这不就是归并排序吗?如果q指向节点的值域和p指向节点的值域相同,则应该丢掉此
2014-05-20 09:43:38 6203 1
原创 链表常见操作:逆置(反转)
链表中的一个很常见的操作是:链表的逆置,也叫链表的反转。如:1->3->5->7->9 反转后是 9->7->5->3->1
2014-05-20 00:17:25 12230 9
原创 单链表,单循环链表,约瑟夫问题
线性表 线性表中的线性一词说的是一种逻辑结构,它表示除了首尾节点外,其它节点都只有一个前驱和一个后继,这是一对一的关系。要想实现线性表得考虑它的物理结构,即选用何种存储结构。线性表主要有两种存储结构:1.顺序存储这即是我们常用的数组,很多语言都内置了这种数据类型,可见它即基础又常用。它的特点是:按位置访问很容易,它是O(1)的;插入和删除相对比较麻烦,因为这普遍要移动元素,它是O(n)的;按内容查找对于无序的表是O(n)的。2.链式存储,
2014-05-12 13:49:02 4677 2
原创 数据结构与算法目录
数据结构与算法系列先看这里,有助于你更好地获取内容。首先明白一个问题:为什么要研究数据结构? 这是因为所有的程序本质上是对数据进行处理,如何高效的处理数据,这依赖于数据本身的结构(如类型(整型、浮点型等)、维数、是否为复杂类型(结构体类型、类类型)等)以及数据之间的逻辑关系(线性、非线性等)。我们所学的数据结构这门课程就是研究这些内容的,只有弄清楚了这些,我们才可以用高效的算法与之结合,产生高效率的程序。掌握好数据结构的内容也是一个程序员的基本功,特别对于c/c++程序员。
2014-05-12 13:48:23 15382 2
原创 挑战面试编程:单词翻转、高斯公式、魔方矩阵、黑白球、3n+1
题一: 把一字符串如"I love you."变为"you. love I"。题二: 高斯在上小学时发明了等差数列求和公式:1+2+..+100=5050。现在问题在于给你一个正整数n,问你他可以表示为多少种连续正整数之和?(自身也算)。(取自csdn高校俱乐部线上编程挑战赛)题三:打印魔方矩阵:如三阶的:8 1 63 5 74 9 2规律是:题四 黑白球一个袋子里有两种颜色的球,黑色和白色,你每次从中取出两个球,如果是同色的,则在袋子里放一个白球,否则放回一个
2014-05-08 17:26:35 2161 1
原创 挑战面试编程:最大连续子序列和
挑战面试编程:最大连续子序列和问题对于形如:int arr[] = { 1, -5, 3, 8, -9, 6 };的数组,求出它的最大连续子序列和。若数组中全部元素都是正数,则最大连续子序列和即是整个数组。若数组中全部元素都是负数,则最大连续子序列和即是空序列,最大和就是0。方法一用sum[i,j]表示arr[i]到arr[j]的和,则显然可以通过枚举(i<=j),求出所有的和。
2014-05-08 00:29:25 1781
原创 挑战面试编程:字符串转换为整数
挑战面试编程:字符串转换为整数将类似这样的字符串,"abc123abc"转换为整数,即为123。若是"abc",则直接输出0。本题看似很简单,但有些地方还得注意:字符串中可能带有符号,如'+' '-',这得考虑。该整数位可能很长,所以必须能够处理溢出的情况:对于过大的,输出MAX_INT;对于过小的,输出MIN_INT。代码
2014-05-07 22:48:29 1479
原创 挑战面试编程:计算整数二进制位中1的个数
题目:在计算机中,整数是以2的补码的形式给出的。 给出整数A和B,假设计算机是32位机,求从A到B之间的所有二进制数中,一共用了多少个1。 输入格式: 多组数据,每组数据一行,由两个整数A,B, -2147483648<=A<=B<=2147483647 输出格式: 每组输出一行,从A到B使用的1的个数。(本题取自csdn高校俱乐部线上编程挑战赛)分析: 我们知道任何数据在计算机中都是用二进制表示的,即用一堆0或1表示各种类型的数据。当然还要考虑它的字节数,例如在32位机中。sizeof
2014-05-07 21:22:20 2286 4
外排序-多路归并
2014-08-23
哈夫曼树&哈弗曼编码
2014-07-12
一元多项式的加法、减法、乘法
2014-06-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人