
数据结构
文章平均质量分 70
Scofield-
闻道有先后术业有专攻如是而已
展开
-
基本排序之选择排序
关于选择排序,它不同于比较,也不同于插入,它的核心是,选,怎么选?很简单,每次,选到最小的和第一个交换,前面排行的,就直接忽略,相对于,谁说最小的?去第一位,谁是第二小的?去第二,依次,到最后,所以看代码,很简单:#includeusing namespace std;template void select(T p[],int n){ int i,j,k; T d; fo原创 2013-06-08 13:40:54 · 528 阅读 · 0 评论 -
图的两种遍历实现
老规矩,1.你必须明白,什么是图?2.图是干什么的?3.图的最基本的物理存储有哪些?4.遍历图到底是在干什么?有哪些方式?弄清楚这些,我这里介绍一种,图的邻接表存储方式实现的,完成初始化,输出,和两种遍历方式。上代码,自己看#include#include#include"sq_Queue.h"using namespace std;template struct n原创 2013-06-06 15:05:18 · 1069 阅读 · 0 评论 -
线性hash表的实现和操作
今天简单说一下,hash表的实现,在此之前,你首先要明白1.什么是hash表,它是用来干什么的?2.什么是查找?什么时候只能用顺序查找?什么时候能用二分查找?3.什么是冲突?什么是hash码?同样的,把这些东西弄清楚了,再来看,我实现了一个简单的线性hash表,可以插入,同时也可以快速的查找出来。看代码#includeusing namespace std;template原创 2013-06-06 16:44:37 · 848 阅读 · 0 评论 -
外链hash表达实现和操作
关于hash表,其实有很多,前面就介绍了一种,最为简单的线性hash表,还有一些,比如采用随机产生的hash码的hash表,还有增加一个溢出表达hash表,等等,人的精力总是有限的,对于那些暂时不用的,我们就不用去学,需要的时候再来看,所以我今天介绍一种,外链的hash表,因为,它是最常用和最有效的一种,非常类似,图的存储,所以拿过来,大家看看。好了,依旧先上代码吧#includeusi原创 2013-06-07 18:37:41 · 650 阅读 · 0 评论 -
基本排序之快速排序
关于快速排序,你首先要弄清楚:1.它是什么类型的?也就是说,是比较,还是选择,还是?2.为什么叫快?快在哪里?这里这个排序,不是那种最为简洁的,但是,前面说过了,算法思想一样,但是具体的实现可以千差万别,确实不够干净,但是,你要能搞清楚里面的所有细节,当你面对那些简洁的时候,就显得更容易了,先上代码:#includeusing namespace std;template v原创 2013-06-08 11:18:37 · 535 阅读 · 0 评论 -
基本排序之插入排序
关于排序,你最重要的一定要学会它的思想,也就是通过什么方式排序?这里就是一个插入法,也就是无序的元素,依次插入有序的序列中,是和前面有很明显的不同,前面都是相互交换,这里是插进去,看到区别了吗?插入排序也是很简单的一种,看代码吧,没什么好说的:#includeusing namespace std;template void insort(T p[],int n){ int j,k原创 2013-06-08 11:34:03 · 518 阅读 · 0 评论 -
基本排序之希尔排序
关于希尔排序,这是一种不稳定,而且属于插入排序。为什么?希尔排序=分成若干个组子序列,分别插入排序。怎么分组?有一个增量h,没增加h,则把它们放在一起。插入排序,直到h减少到1,此时正是简单插入排序。看代码#includeusing namespace std;template void shel(T p[],int n){ int k,j,i; T t; k=n/原创 2013-06-08 11:50:55 · 528 阅读 · 0 评论 -
基本排序之冒泡排序
关于排序,这个是最,,,最基础的东西,但是,当我们学习排序的时候,我们似乎忘了一些问题,好像为了排序而排序,都忘记在干什么?那么有下面问题:1.为什么要排序?难道就是简简单单从大到小?2.排了序,又能干什么?仅仅为了比大小?我们就都排个序?3.你是对什么元素排序?它是怎么存储的??和了,知道,这些,你就明白,这里我是对程序设计语言中的一维数组进行的排序。冒泡排序,大家在学排序的原创 2013-06-07 21:48:39 · 765 阅读 · 0 评论 -
基本排序之归并排序
今天,再来介绍一种排序方法,归并排序。什么意思?把n个长度的线性表看成n个长度为1的有序表,然后,两两归并,也称2-路归并排序。它的实现有递归形式的,还有非递归形式的。我这里主要说,非递归形式的算法。先看代码,我再来解释。#includeusing namespace std;template void merge(T p[],int n){ int m,k,j,l原创 2013-06-08 19:42:50 · 710 阅读 · 0 评论 -
线索二叉树生成与中序遍历操作
我准备说一下,线索二叉树,同样的,你必须首先明白,什么是线索二叉树,而为什么有线索二叉树呢?这都是基本问题,我就不多讲了,因为连这些都不懂,估计你也就看不懂线索二叉树,到底在干什么了,多说无益先直接上代码。clue_in_BTree.h#includeusing namespace std;template struct TTnode{ T d; int lflag; in原创 2013-06-05 22:09:20 · 779 阅读 · 0 评论 -
二叉树的生成与三种遍历
如题,要想弄明白二叉树的生成与遍历,首先你必须明白以下几个问题:1.什么是树?树到底有什么用?2.什么又是所谓的二叉树??它又能干什么?3.每种数据结构,都必须要存储起来,那二叉树在物理上到底采用什么方法存储???好了,知道了这些,我们就可以开始了,这个是一个二叉链表类,写Binary_Tree.h#includeusing namespace std;template原创 2013-06-05 19:03:20 · 1054 阅读 · 0 评论 -
循环链表的实现和操作
关于这个问题,你首先要明白?1.什么是循环链表?2.为什么要有循环链表?3.与普通的线性链表相比,又有什么优点?弄清楚这些问题,再来看代码,如下:linked_CList.h#includeusing namespace std;template struct node{ T d; node *next;};template class linked_CLis原创 2013-06-05 13:11:41 · 931 阅读 · 0 评论 -
基本排序之堆排序
还是,老规矩,对排序——是一种选择类型的排序,因为选择的方式不同,所以在堆排序中,堆顶要么最大,要么最小,每次这样拿,直到剩下最后一个位置。堆排序,可没有前面几种那么简单,因为它设计到一个建堆问题,也就是如何创建堆的,要想看懂堆排序,首先,你必须看懂sift函数,好了,先看代码,再来分析。#includeusing namespace std;template void hap(T原创 2013-06-08 15:05:17 · 585 阅读 · 0 评论 -
简单的拓扑排序
这里我要说的拓扑排序和你见到的图的拓扑排序不一样,这是个简单的n个事件对应m种关系的拓扑排序,因此里面就有些细节要注意。对于拓扑排序,你一定要看清楚是给出的哪种关系?这就直接决定了,你的排序方法。先看代码,没一定基础的同学肯定看不懂,最后,稍加解释。#includeusing namespace std;void topo(int n,int r[],int m,int p[]){原创 2013-06-09 22:26:46 · 509 阅读 · 0 评论 -
顺序表类的实现和基本操作
介绍一下数据结构最基本的一种类型,相信大家都已熟悉,那么把它封装好写成一个类,具体如何实现,下面给出一个头文件和具体调用,亲测可以用,最后附结果图。写一个头文件,sq_LList.h,用c++代码编写如下:#includeusing namespace std;template class sq_LList{ private: int mm; int nn; T原创 2013-06-04 16:25:01 · 884 阅读 · 0 评论 -
线性单链表的实现和操作
首先,要明白一个问题,那就是,什么是链表,为什么有链表类?其实,说简单一点就是一种最基本的存储方式,可以是顺序存,也可以是链式存,各有优点,所以需要把以前的那些,该用链式存实现一次。不过,申明一下,此代码是有关单链表的,而且仅仅实现表头的插入和删除操作,先熟悉一下吧我们先定义一个线性单链表类.linked_List.h#includeusing namespace std;t原创 2013-06-04 21:49:14 · 734 阅读 · 0 评论 -
顺序栈的实现和操作
首先,要明白两点:1.栈实际上是线性表,只是一种特殊的线性表。2.栈道特殊性就是限定在一端进行插入与删除的线性表。具体实现如下,写一个头文件,sq_Stack.h#includeusing namespace std;template class sq_Stack{ private: int mm; int top; T *s; public: sq_St原创 2013-06-04 19:51:58 · 665 阅读 · 0 评论 -
循环队列的实现和操作
要明白,队列(queue)是允许在队尾插入(),而在队头删除()的线性表2.要千万记住,是队尾插入一个元素,队头删除一个元素,共同点就是指针都是一直往后移动的。老规矩,写一个头文件,sq_Queue.h#includeusing namespace std;template class sq_Queue{private: int mm; int front; int re原创 2013-06-04 20:51:58 · 705 阅读 · 0 评论 -
带链的栈的实现和操作
这个是用链表实现的栈,具体不想多说,直接看代码。先写linked_Stack.h#includeusing namespace std;template struct node{T d;node *next;};template class linked_Stack{ private: node *top; public: linked_Stack();原创 2013-06-04 22:31:42 · 2025 阅读 · 0 评论 -
线性链表的实现和操作
本次实现的是线性链表的操作,和上次单链表不同在于,上次只实现了表头的插入和删除,这次是对线性表的整体实现插入和删除废话不多说,直接看代码,linked_LList.h#includeusing namespace std;template struct node{T d;node *next;};template class linked_LList{ private:原创 2013-06-05 12:32:32 · 719 阅读 · 0 评论 -
二叉排序树的实现和操作
先提几个问题,如下:1.还记得二分查找吗?(对分查找)它是适合于操作什么类型的数据?2.二叉树,二叉完全树,二叉排序树,堆排序,分别是什么?它们是用来干什么?3.为什么二叉树要用中序遍历,而不是前或者后序遍历?好了,这里我给出了,二叉排序树的插入,删除,输出,与查找的用例,具体看代码:#includeusing namespace std;template struct原创 2013-06-08 22:06:00 · 741 阅读 · 0 评论