数据结构与算法
idreaming689
提高自己的认知
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法与数据结构-链表LeetCode
链表操作 1,链表逆序-a leetcode 206 整个链表进行逆序 #include<stdio.h> struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){} }; class Solution{ public: ListNode* reverseList(ListNode*head){ ListNode *new_head=NULL;//指向新链表的头节点的指针 while(原创 2021-07-19 10:33:26 · 179 阅读 · 3 评论 -
实现超大数的加法运算C++
实现超大数的加法运算。 将字符串拆解为数字,与字符‘0’的偏移得出数字的真实大小。 每一位进行相加操作,注意进位操作。 多出的长度再进行相加。 不要忘了最后一个进位。 #include<iostream> #include<string> #include<vector> std::vector<int> stringAdd(std::string strA, std::string strB) { std::vector<int>原创 2021-04-02 10:05:10 · 653 阅读 · 0 评论 -
字符串旋转
连续的字符串旋转 注意strlen与sizeof的区别 //字符串翻转 int ReverseString(char* a) { int len = strlen(a); for (int i = 0, j = len - 1; i < j; i++, j--) { char c = a[i]; a[i] = a[j]; a[j] = c; } return 1; } int main() { char arry[] = "asdfghj"; ReverseString原创 2021-04-01 15:02:13 · 96 阅读 · 0 评论 -
快速排序总结
步骤: 1, 先从数列中取出一个数作为基准 2, 分区过程,将比这个数大的数全放到他的右边,小于等于的全部放到他的左边 3, 在对左右区间重复第二步,直到各区间只有一个数 思想: 挖坑+填数+分治算法 int partition_get(int*a, int left, int right) { int i = left; int j = right; int key = a[left]; while (i < j) { while (i<j&&a[j]&..原创 2021-04-01 14:44:09 · 114 阅读 · 0 评论 -
N的阶乘递归实现
#include <iostream> using namespace std; int GetNum(int n) { int sum = 1; if(1 == n) { return 1; } sum =n * GetNum(n - 1); return sum; }原创 2019-09-25 12:56:43 · 1340 阅读 · 0 评论 -
查找数组中第二大的数
快速找出一个数组中的最大数、第二大数。 思路: 如果当 前元素大于最大数 max,则让第二大数等于原来的最大数 max,再把当前元素的值赋给 max。如果当前的元素大于等于第二大数secondMax的值而小于最大数max的值,则要把当前元素的值赋给 secondMax。 void GetSecondMaxNumber(int *arr , int n) { int ...转载 2019-09-25 12:48:26 · 3636 阅读 · 0 评论 -
快速排序总结C++实现
1 概念 快速排序使用的是分治思想。 分治法 分治,字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。在计算机科学中,分治法就是运用分治思想的一种很重要的算法。分治法是很多高效算法的基础,如快速排序,归并排序,傅立叶变换(快速傅立叶变换)等等...转载 2019-04-18 14:13:59 · 186 阅读 · 0 评论 -
链表合并
将两个有序链表合并 题目:已知两个链表head1和head2各自有序,请把它们合并成一个链表依然有序。(保留所有结点,即便大小相同)。 递归实现: 1.函数返回条件是有一个链表结束,则返回另一个链表 2.取两个指针data域较小的作为新的头结点,递归调用 循环实现: 1.重新申请一个头结点,使用指针p指向他,每新加一个结点,就将指针p后移一位,即指针p永远指向新链表的尾结点 2....转载 2019-04-22 12:56:44 · 183 阅读 · 0 评论 -
归并排序
基本思想: 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。 分而治之 合并相邻的子序列: #include <iostream> ...转载 2019-04-22 12:40:32 · 131 阅读 · 0 评论 -
判断单向链表中是否有环C++实现
原文:https://blog.youkuaiyun.com/caoshangpa/article/details/80363335 判断链表是否有环的经典的方法是快慢指针的方法。 快指针pf每次移动两个节点,慢指针ps每次移动一个节点,如果指针可以追上慢指针,那就说明其中有一个环,反之没有。 结论:链表存在环,则fast和slow两指针必然会在slo...转载 2019-04-17 15:50:30 · 2796 阅读 · 0 评论 -
二分查找算法C++实现
二分查找的应用场景: 二分查找目的是在一堆数中找到指定的数。 使用二分查找这些数据需要有的特征(面试容易问): 存储在数组中。 有序的排列。 如果是链表就无法使用二分查找。 顺序数组是递增递减,是否有重复的数据没有关系。 二分查找的实现 “分治法”,分治法基本都可以用递归来实现的,二分查找法的递归实现如下: int SearchBin(int array[], int low, ...原创 2019-04-17 11:55:27 · 6809 阅读 · 0 评论
分享