算法与数据结构
H_JJia
挥舞着笔墨,把人生写得淋漓尽致;敲击着键盘,把世界编得明明白白。
展开
-
【欧几里算法】寻找两数的最大公约数
【欧几里算法】寻找两数的最大公约数目的:寻找两数的最大公约数;描述:有两个非负整数p和q,若q是0,则两数的最大公约数是p;否则,将p除以q得到余数r,q和p的最大公约数即为q和余数r的最大公约数;注意:任何正整数都是零的约数;算法:public static int fun(int p ,int q) { if(q==0)原创 2017-07-23 17:53:03 · 1042 阅读 · 0 评论 -
【查找】二分法查找
【查找】二分法查找二分查找的原理:算法定义三个变量lo,mid,hi,在已经排好序的数据中,不断地将中间参考值mid与被查找的值作比较。如果被查找的值小于中间参考值str[mid],则算法将搜索范围缩小一半,在str[mid]的左半部分查找;如果被查找的值大于中间参考值str[mid],则算法将搜索范围缩小一半,在str[mid]的左半部分查找。知道被查找的值=str[原创 2017-07-23 17:30:23 · 352 阅读 · 0 评论 -
删除链表中值为x的元素结点(java语言)
一、题目:给一个链表,将值为x的元素删除。比如,一个链表为:{1,1,2,3,4,1,1,1,1,5,6,6,7,7}, 然后删除的值x=1,最终输出的链表为:{2,3,4,5,6,6,7,7}二、思路:遍历整个链表,如果第i个结点的值等于删除的值x,则将第(i-1)节点的指针指向(i+1)的结点,就相当于跳过了第 i 个结点。三、思路代码实现:/*原创 2017-09-23 18:08:44 · 3311 阅读 · 2 评论 -
将两个递增有序的带头结点的单链表A、B合并成为一个递增有序的带头结点的单链表
一、题目将两个递增有序的带头结点的单链表A、B合并成为一个递增有序的带头结点的单链表。二、思路将单链表A、B遍历,比较两个链表中元素的值,分为下列情况:A < B,则A的指针向后移一位,然后再与B比较;A=B,则A、B的指针同时向后移一位;A>B,则B的指针向后移一位,然后再与A比较;注意若A遍历完,B未遍历完,就将B的剩余部分接到新链表的尾部;若B遍历完,A未遍历完,就将A的剩余部分接原创 2017-10-06 22:20:26 · 12100 阅读 · 0 评论 -
将链表L就地逆置,即利用原表各结点的空间实现逆置
一、题目将链表L就地逆置,即利用原表各结点的空间实现逆置。二、思路在链表的第二个元素开始执行逆置,因为如果链表只有一个元素,那么逆置就没有意义了。步骤:假设原链表如下: 将结点1的指针指向结点3,也就是说将结点2脱离链表: 然后将L链表的头结点指针指向结点2,然后结点2变成第一个元素,结点2的指针指向结点1,此刻实现了第一个逆置。 重复上述2、 3步,将结点3脱离链表,然后就可以接到头结点原创 2017-10-07 10:30:31 · 6922 阅读 · 6 评论 -
设计算法以判断集合A是否是集合B的子集
一、题目:假设递增有序的带头结点的链表A、B分别表示一个集合,试设计算法以判断集合A是否是集合B的子集,如是返回1,否则返回0。二、思路:1.A的值大于B的值,那就A的元素不变,B指向下一个元素,再比较;2.A的值小于B的值,那就A指向下一个元素,B的元素不变,再比较;3.A的值等于B的值,然后A,B同时指向下一个元素,而且n累加1;(此处的n最后用来与A链表的长度比较,若n=A链表的长度,则说明A原创 2017-10-04 15:31:05 · 9719 阅读 · 1 评论