数据结构
陈默涵
这个家伙真的是个小白
展开
-
折半插入排序的代码实现与思考
对于大量的数据,直接插入排序的比较与移动的次数会比较多,在直接插入排序的基础上,为了减少比较的次数,实现了折半插入排序。 折半插入排序主要分为两个部分,第一部分就是找到待排数字应该插入的位置,第二部分就是移动数据,将待排数据插入有序数列中。 数据结构和直接插入排序的数据结构相同,在折半插入排序的代码如下void BInsertSort(sqList L,int len){ //这个是利原创 2016-05-10 12:18:52 · 1639 阅读 · 0 评论 -
0-1背包问题分析及代码实现
0-1背包问题动态数组申请原创 2016-08-30 21:39:20 · 3555 阅读 · 0 评论 -
求字符串中最长对称字符串的长度
求字符串中最长对称字符串的长度, 例如google中最长对称字符串的个数是4 iqiyiyiq中最长对称字符串的个数是6; 这种题目呢,不知道如何用语言表达清楚自己的思路,也许是自己理解的不够清楚吧,但是这种题目利用具体事例就可以将代码写出来; 代码如下:#include<iostream>#include<string>using namespace std;int isSymmet原创 2016-08-29 21:17:01 · 1875 阅读 · 0 评论 -
char类型的输入
今天在写程序的时候发现对字符类型进行输入数字时,会出现意想不到的意外。 例如char data; cin>>data; 当我想要输入数字123时,但是实际上data只是读入了1 如图所示 因为char只接受1个字符,没有啥子办法撒,只好换个类型了原创 2016-07-13 16:38:34 · 8000 阅读 · 0 评论 -
二叉排序树与双向链表的转换
前几天见到过这个题,觉得打破了自己老套的思路,所以记录了下来。 题目是:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整结点指针的指向。如图所示10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 今天又看到了这道题吗,可惜前几天看的都原创 2016-07-23 11:34:47 · 840 阅读 · 0 评论 -
简单选择排序的代码实现与思考
简单选择排序,每次在n-i+1个记录中选取最小的记录,作为有序序列中的第i个记录,选择排序的时间复杂度是O(n2),空间复杂度是O(1),是一种稳定的排序算法。 代码如下:#include<iostream>using namespace std;int selectMin(int *a,int i,int len){ int minIndex=i; int min=a[i原创 2016-06-06 15:27:10 · 459 阅读 · 0 评论 -
二元查找树与排序的双向链表的转换
这道题目来自 1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 10 / \ 6 14 / \ / \ 4 8 12 16 转换成双向链表 4=6=8=10=12=14=16。 首先我们定义的二元查找树节点的数据结构如下: struct BSTreeNode { in原创 2016-04-24 20:07:55 · 490 阅读 · 0 评论 -
堆排序的代码实现与思考
堆的定义如下:n个元素的序列{k1,k2,…,kn}当且仅当满足以下关系时,称之为堆。若将和此序列对应的一维数组看成一个完全二叉树,即堆的含义表明安全二叉树中所有非终端节点的值均不大于(或不小于)其左右孩子节点的值。堆顶元素则必是堆顶最大值或最小值。具体的分析在严蔚敏的《数据结构》上已经说的很清楚很明白了。作为总结,说一下在代码实现中需要注意的两点。 第一,无序序列构造堆,方向是从叶子节点到根节点原创 2016-06-01 20:45:59 · 347 阅读 · 0 评论 -
快速排序递归与非递归代码实现与思考
有的时候也是不知道是为什么,就像高中数学王老师说的那样,熟能生巧,不理解的要学会接受,慢慢就会理解了。大二的时候进行数据结构课程设计,我选做的一个是将快速排序的递归程序修改成非递归的形式,我记得我当时修改了好久好几,总是觉得这个非递归不能办到,但是当时根本没有想到用栈的思想,现在又重新学习数据结构,知道了递归与栈之间的关系。在剑指offer这本书中读到递归的本质就是栈结构,所以将递归函数拆成非递归的原创 2016-05-30 17:11:44 · 642 阅读 · 0 评论 -
二路插入排序的思考与代码实现
二路插入排序,如果第一个作为比较划分为两个部分的那个关键字选得好的话,那么移动的次数就会减少很多,比较的次数也会减少很多,但是需要有n个空间辅助,忽然想起本科的数据结构老师说要么用时间换空间,要么用空间换时间,后来又听说现在计算机内存都够用的,感觉又跑偏了……,没办法受酱油师兄的影响实有点大,话语间总有他的风格。 写这个程序的时候,有几点需要注意: 1.final指针和first指针不一样,fi原创 2016-05-11 11:41:12 · 617 阅读 · 0 评论 -
直接插入排序思考与代码实现
在直接插入排序中,在严蔚敏的书中说是需要设置哨兵,哨兵的作用是避免数组出界,所以在第一个位置设置哨兵,在经过思考这算法对我来说最值得学习的地方就是在比较的同时移动位置,这样会减少时间复杂度 void SIS(sqList &L,int len) { //这里有非常值得学习的地方,那就是在比较的同时直接进行移动 //这个是有哨兵的 if(len<=1) return;原创 2016-05-09 17:32:15 · 977 阅读 · 1 评论 -
归并排序的代码实现与思考
在严蔚敏的数据结构中的链表部分就写了归并排序,在10.5中也实现了归并排序,只是是对一个未排序数组进行的例如未排序数组49,38,65,97,76,13,27,49.首先是要对该数组进行分割,对分割的进行排序,也就是2路归并排序。代码实现如下:#include<iostream>using namespace std;void Merge(int *a,int *temp,int low,int原创 2016-06-06 14:36:12 · 646 阅读 · 0 评论