Data Structures and Algorithms
lesliefish
不要停歇、不回头
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
尾插法建立单向链表 C语言实现
代码实现#include<stdlib.h>#include<stdio.h>//定义linklist结构体类型typedef struct linklist{ int data; struct linklist *next;}list,*plist;//建立一个结构体list及linklist结构体类型指针//尾插法建链表void tail_insert(plist *h原创 2016-01-12 20:59:58 · 12379 阅读 · 0 评论 -
快速排序
参考博客地址:http://blog.csdn.net/morewindows/article/details/6684558快速排序采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 该方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步原创 2016-05-16 09:20:24 · 447 阅读 · 0 评论 -
设计一个可以获取最小值功能的栈
设计一个有getMin功能的栈 – C++实现【题目】: 实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。 【要求】: 1、pop、push、getMin操作的时间复杂度都是O(1)。 2、设计的栈类型可以使用现成的栈结构。解题设计使用两个栈,一个栈保存当前栈中元素(stackData),另一个保存每次入栈的最小值(stackMin)。具体解题算法C+原创 2016-05-18 16:50:19 · 1406 阅读 · 0 评论 -
两个栈实现一个队列
两个栈实现一个队列 – C++题目:编写一个类,用两个栈实现一个队列,支持队列基本操作(push,pop,front)实现细节1、如果stackPush要往stackPop中压入数据,那么必须一次性把stackPush中数据全部压入; 2、如果stackPop非空,stackPush绝对不能向stackPop()中压入数据。本例中队列功能描述:push():将一个元素放入queue内。front原创 2016-05-18 19:27:00 · 425 阅读 · 0 评论 -
仅用递归函数和栈操作逆序一个栈
仅用递归函数和栈操作逆序一个栈 – C++题目: 一个栈依次压入1、2、3、4、5,那么栈顶到栈底分别为:5、4、3、2、1。 将这个栈逆置后栈顶到栈底分别为1、2、3、4、5。 用递归函数来实现,不能用其他数据结构。解题思路及代码1、递归函数一:将栈的栈底元素一个个返回并移除。 2、递归函数二:逆序栈,调用递归函数一实现。C++实现:class Solution{public:原创 2016-05-19 10:54:45 · 2546 阅读 · 0 评论 -
用一个栈实现另一个栈的排序
用一个栈实现另一个栈的排序 – C++题目: 一个栈中元素类型为整型,现在想将该栈从顶到底按从小到大的顺序排序,只许申请一个辅助栈。 除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?算法C++代码:class Solution{public: //借助一个临时栈排序源栈 static void sortStackByStack(stack<int>& s)原创 2016-05-19 13:05:55 · 793 阅读 · 0 评论 -
生成窗口最大值数组
生成窗口最大值数组 – C++题目 给出一个整形数组,例如arr = {5,4,3,5,6,7,6},窗口大小为w=3,窗口每次向右移动一位,输出每个窗口中最大值组成的数组。 [5,4,3,]5,6,7,6 窗口最大值为5 5,[4,3,5,]6,7,6 窗口最大值为5 5,4,[3,5,6,]7,6 窗口最大值为6 5,4,3,[5,6,7,]6 窗原创 2016-05-19 16:22:33 · 828 阅读 · 0 评论 -
打印两个有序链表的公共部分
打印两个有序链表的公共部分 – C++题目: 给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。解题思路及代码:1、head1的值小于head2,则head1往下移动 2、head1的值小于head2,则head2往下移动 3、相等则打印任何一个链表节点的值,head1和head2都往下移动。 4、当head1或head2移动到NULL,终止。算法C++代码:ty原创 2016-05-19 22:28:10 · 509 阅读 · 0 评论 -
删除链表的中间节点
删除链表的中间节点题目:给定链表头结点head,实现删除链表的中间节点函数。解题思路及代码:快慢指针,快指针走两步,慢指针一步。 当快指针走到终点时,慢指针正好是链表中间节点,删除此节点即可。链表结构定义:typedef struct Node{ int data; struct Node* next;}node, *pLinkedList;算法C++代码:Node* remo原创 2016-05-20 13:48:58 · 1541 阅读 · 0 评论 -
单链表删除倒数第k个节点
单链表删除倒数第k个节点 题目: 删除单链表中倒数第k个节点解题思路及算法代码:标尺法,定义两个指针指向链表头结点,先让一个走k步,然后两个指针同时开始走,当先走的指针走到末尾时,后走的指针指向的结点就是需要删除的结点。单链表结构定义:typedef struct Node{ int data; struct Node* next;}node, *pLinkedList;删除倒原创 2016-05-20 10:25:06 · 1661 阅读 · 0 评论 -
环形单链表的约瑟夫问题
环形单链表的约瑟夫问题题目: 约瑟夫环(约瑟夫问题)是一个数学的应用问题: 已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌只剩一个人。解题思路: 1、如果链表为空,或者链表节点数为1,return head; 2、环形链表中循环遍历每个节点,不断转圈,不断让原创 2016-05-20 18:28:49 · 2354 阅读 · 0 评论 -
判断一个链表是否为回文结构
判断一个链表是否为回文结构 – C++题目: 给定一个链表头节点head,请判断是否为回文结构例如: 1->2->1 true 1->2->2->1 true 1->2->3->4->2->1 false解题思路及代码1、找到链表中间节点,然后将链表中间节点的右边所有节点放入一个栈中。 2、然后从链表首节点和栈顶元素一一对比,不相等则retu原创 2016-05-20 21:42:47 · 1210 阅读 · 0 评论 -
单链表按k值重新排序
单链表按k值重新排序题目要求: 给定一链表头节点,节点值类型是整型。 现给一整数k,根据k将链表排序为小于k,等于k,大于k的一个链表。 对某部分内的节点顺序不做要求。算法思路分析及代码(C++)思路:将链表分为小于k、等于k、大于k的三个链表,然后再合并。链表结点定义:typedef struct Node{ int data; struct Node* next;}no原创 2016-05-20 22:43:40 · 827 阅读 · 0 评论 -
【剑指offer】字符串中空格的替换
题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。#include <iostream>using namespace std;void replaceSpace(char* str){ char strtemp[256] = { 0 }; //另外开辟一段空间保存新的字原创 2017-02-07 21:50:48 · 424 阅读 · 0 评论 -
【剑指offer】 二维数组中的查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。#include <iostream>#include <vector>using namespace std;bool Find(int target, vector<vector<int> > array) { int原创 2017-02-07 20:48:14 · 383 阅读 · 0 评论 -
【剑指offer】先序、中序遍历结果重建二叉树
题目输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。#include <iostream>#include <vector>#include <stack>using namespace std;struct原创 2017-02-08 14:30:27 · 494 阅读 · 0 评论 -
【剑指offer】两个栈实现一个队列 push pop
题目用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型class Solution{public: //stack1 push void push(int node) { stack1.push(node); } //stack2 pop int pop() { if (stack2.empty原创 2017-02-08 15:01:36 · 997 阅读 · 0 评论 -
【剑指offer】旋转数字的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。int minNumberInRotateArray(vector<int> rotateArray)原创 2017-02-08 15:49:57 · 450 阅读 · 0 评论 -
归并排序 -- 高效、稳定的排序算法
归并排序归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法。 该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列; 即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程1、比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到t原创 2016-05-16 22:17:28 · 1851 阅读 · 0 评论 -
二分查找(折半查找) -- 已排序序列的查找算法
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。 因此,折半查找方法适用于不经常变动而查找频繁的有序列表。二分查找思想首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功; 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查原创 2016-05-16 10:04:41 · 7144 阅读 · 1 评论 -
二叉树中序遍历 -- 递归和非递归实现
/* 实现二叉树中序遍历 -- 采用递归和非递归方法** 经调试可直接运行源码如下**/#include <stdio.h>#include <stdlib.h>#include <iostream>#include <stack>using namespace std;/*二叉树结点定义*/typedef struct BTreeNode{ char elem;原创 2016-04-12 22:32:14 · 760 阅读 · 0 评论 -
头插法建立单向链表 C语言实现
!!!!! 代码有bug,请注意。。实现代码#include<stdio.h>#include<stdlib.h>//定义linklist结构体类型typedef struct linklist{ int data; struct linklist *next;}list, *plist;//建立一个结构体list及linklist结构体...原创 2016-01-12 19:57:23 · 5738 阅读 · 1 评论 -
有序插入建立链表 C语言实现
实现代码/*有序插入建立链表 C语言实现*/#include<stdio.h>#include<stdlib.h>/*定义一个linklist结构体类型*/typedef struct linklist{ int data; struct linklist *next;}list, *plist;/*按从小到大顺序插入*/void order_insert_list(pli原创 2016-01-13 13:24:49 · 4605 阅读 · 0 评论 -
单链表结点删除 C语言实现
实现代码:#include<stdlib.h>#include<stdio.h>#define N 15typedef struct linklist{ int data; struct linklist *next;}list, *plist;void create_list(plist* head){ int i; if (NULL == *head)/*原创 2016-01-13 15:36:47 · 6325 阅读 · 0 评论 -
找出链表的中间结点 C语言实现
代码实现#include<stdio.h>#include<stdlib.h>#define N 50typedef struct linklist{ int data; struct linklist *next;}list, *plist;/*创建链表*/void creat_list(plist* head){ int i; plist p;原创 2016-01-13 22:31:57 · 1064 阅读 · 0 评论 -
二叉树先序遍历 -- 递归和非递归实现
/**实现二叉树先序遍历 -- 采用递归和非递归方法,经调试可直接运行源码如下:*/#include <stdio.h>#include <stdlib.h>#include <iostream>#include <stack>using namespace std;/*二叉树结点定义*/typedef struct BTreeNode{ char elem; str原创 2016-04-12 21:07:16 · 636 阅读 · 0 评论 -
求二叉树深度 -- 递归和非递归实现
/*求二叉树深度 -- 采用递归和非递归方法**经调试可运行源码及分析如下:*/#include <stdio.h>#include <stdlib.h>#include <iostream>#include <queue>using namespace std;/*二叉树结点定义*/typedef struct BTreeNode{ char elem; stru原创 2016-04-14 04:18:44 · 1706 阅读 · 0 评论 -
求二叉树节点数 -- 采用递归和非递归方法
/*求二叉树节点数 -- 采用递归和非递归方法(本例非递归采用先序遍历)经调试可运行源码及分析如下:***/#include <stdlib.h>#include <iostream>#include <stack>using std::cout;using std::cin;using std::endl;using std::stack;/*二叉树结点定义*/typedef s原创 2016-04-14 05:26:35 · 4374 阅读 · 0 评论 -
二叉树层次遍历(借助队列实现)
/*按层次遍历二叉树 *经调试可运行源码及分析如下:***/#include <stdlib.h>#include <iostream>#include <queue>using std::cout;using std::cin;using std::endl;using std::queue;/*二叉树结点定义*/typedef struct BTreeNode{ ch原创 2016-04-14 13:09:17 · 6863 阅读 · 0 评论 -
二叉树叶子节点个数计算 -- 采用递归和非递归方法实现
/*求二叉树叶子节点个数 -- 采用递归和非递归方法经调试可运行源码及分析如下:***/#include <stdlib.h>#include <iostream>#include <stack>using std::cout;using std::cin;using std::endl;using std::stack;/*二叉树结点定义*/typedef struct BTre原创 2016-04-14 13:50:09 · 5828 阅读 · 0 评论 -
二叉树后序遍历 -- 递归和非递归实现
/*实现二叉树后序遍历 -- 采用递归和非递归方法*经调试可直接运行源码如下:***/#include <stdio.h>#include <stdlib.h>#include <iostream>#include <stack>using namespace std;/*二叉树结点定义*/typedef struct BTreeNode{ char elem; st原创 2016-04-13 10:05:59 · 632 阅读 · 0 评论 -
二叉树第K层节点个数 -- 采用递归和非递归方法
/*二叉树第k层节点个数 -- 采用递归和非递归方法经调试可运行源码及分析如下:***/#include <stdlib.h>#include <iostream>#include <queue>using std::cout;using std::cin;using std::endl;using std::queue;/*二叉树结点定义*/typedef struct BTre原创 2016-04-14 15:51:50 · 7262 阅读 · 6 评论 -
二叉树第K层叶子节点个数 -- 采用递归和非递归方法实现
/*二叉树第K层叶子节点个数 -- 采用递归和非递归方法经调试可运行源码及分析如下:***/#include <stdlib.h>#include <iostream>#include <queue>using std::cout;using std::cin;using std::endl;using std::queue;/*二叉树结点定义*/typedef struct BT原创 2016-04-14 17:06:33 · 1518 阅读 · 0 评论 -
二叉树第K层的第M个节点 -- 采用非递归层次遍历实现
/*二叉树第K层的第M个节点 -- 采用非递归层次遍历实现经调试可运行源码及分析如下:***/#include <stdlib.h>#include <iostream>#include <queue>using std::cout;using std::cin;using std::endl;using std::queue;/*二叉树结点定义*/typedef struct B原创 2016-04-14 21:55:53 · 888 阅读 · 0 评论 -
判断两个二叉树是否相等(仅结构) -- 递归和非递归实现
/*判断两个二叉树是否相等(仅结构,不包括数据)经调试可运行源码及分析如下:***/#include <stdlib.h>#include <iostream>#include <queue>using std::cout;using std::cin;using std::endl;using std::queue;/*二叉树结点定义*/typedef struct BTreeN原创 2016-04-15 13:32:55 · 4451 阅读 · 0 评论 -
两个二叉树结构是否相同(结构和数据都相同) -- 递归和非递归方法
/*两个二叉树结构是否相同(结构和数据都相同) -- 递归和非递归方法经调试可运行源码及分析如下:***/#include <stdlib.h>#include <iostream>#include <queue>using std::cout;using std::cin;using std::endl;using std::queue;/*二叉树结点定义*/typedef st原创 2016-04-15 15:44:25 · 937 阅读 · 0 评论 -
求二叉树镜像 -- 采用递归和非递归方法
/*求二叉树镜像 -- 采用递归和非递归方法经调试可运行源码及分析如下:***/#include <stdlib.h>#include <iostream>#include <queue>using std::cout;using std::cin;using std::endl;using std::queue;/*二叉树结点定义*/typedef struct BTreeNod原创 2016-04-15 19:08:06 · 624 阅读 · 0 评论 -
数据结构之单链表常见操作 C
#include<stdio.h>#include<stdlib.h>#include<time.h>#define N 15typedef struct node{ int data; struct node *next;}node,*linklist;//初始化单链表int creat_list(linklist *list){ *list = (linkl原创 2016-01-16 14:39:49 · 674 阅读 · 0 评论 -
在字符串中找出连续最长的英文字符串
1、不区分大小写 2、返回连续最长串的长度 3、拷贝给新串#include <stdio.h>#include <stdlib.h>int is_zimu(char ch){ if (ch >= 'a' && ch <= 'z' || ch >= 'A' && ch <= 'Z') return 1; else return 0;}int f原创 2017-07-04 00:58:20 · 1868 阅读 · 0 评论
分享