
数据结构
f斗牛士
这个作者很懒,什么都没留下…
展开
-
(C++)数据结构学习二---队列
1.队列概述队列是限定只能在一端进行插入操作而在另一端进行删除操作的线性表。可以进行插入操作的一端称为队列尾(rear)。可以进行删除的一端称为队列头(front)。删除操作又称为出队列操作。2.顺序队列顺序队列的定义及实现•队列的顺序存储结构是用一组地址连续的存储空间,依次存放从队列头到队列尾的所有数据元素;•使用队列头指针(front)和队列尾指针(rear)分别记录队列头和队列尾的位置。•具...原创 2018-06-13 09:25:51 · 271 阅读 · 0 评论 -
(C++)数据结构学习一---栈
1.栈的概述栈的主要特点是后进先出(last in first out,LIFO),即出栈元素只能是位于栈顶的元素,入栈也只能在栈顶。栈是只能在一端(栈顶)进行插入或删除的线性表。n个元素依次入栈,可在任意时刻出栈,则共有种可能。 栈的存储结构: 2.顺序栈代码实现#ifndef _SEQSTACK_H#define...原创 2018-06-10 15:21:54 · 1194 阅读 · 0 评论 -
(C++)数据结构排序---二路归并排序
二路归并排基本思想:把拥有n个数据的数组看做n个有序序列,然后两两归并,得到n/2组有序序列;重复上述操作,达到n/4组有序序列;重复上述操作,直到n个数据均为有序。平均情况的时间复杂度 最好情况的时间复杂度 最坏情况的时间复杂度 空间复杂度 O(nlog2(n)) O(nlo...原创 2018-06-21 22:49:42 · 2120 阅读 · 0 评论 -
(C++)数据结构排序---堆排序
堆排序是选择排序的一种改进。堆是一种特殊的完全二叉树:每个节点的值都小于或等于其左右子节点的值(小顶堆),反之为大顶堆。堆排序的关键是:创建堆和抽掉堆顶之后的堆重建。注意:设n个数据在数组a[1]~a[n]中,当前要筛选的节点编号为k,堆中最后一个节点的编号为m,且k的左右子树均为堆。template<class Type> void Shift(Type a[],int k,int...原创 2018-06-21 17:30:26 · 199 阅读 · 0 评论 -
(C++)数据结构排序---快速排序
快速排序几乎是最快的排序算法。在所有关键字为逆序时排序速度最快。基本思想:在待排记录中选取一个记录做为枢纽。数组中的数据与枢纽作对比,从而分成两部分,左边小于枢纽值,右边部分大于枢纽值。枢纽为分界线。划分过程如下:(1)选取数组第一个数字作为基准,存储起来,设两个值分别指向数组头部尾部的下标,分别为i,j。(2)a[j]与基准作比较,若a[j]大于基准,则j前移,直到找到第一个小于基准的值,此时,...原创 2018-06-21 15:59:53 · 971 阅读 · 0 评论 -
(C++)数据结构排序---希尔排序
希尔排序是对直接插入排序的一种改进算法。它基于插入排序的两个性质:(1)若待排序记录按关键字基本有序,直接插入排序效率很高(2)若带排记录个数较少,直接插入排序效率很高希尔排序的基本思想:一个数组有n个数据,把所有数据以间距m分组,分成n/m个组,间距为m的数据为一组数据;例如有10个数据,以间距5分组,a[0],a[5]为一组;a[1],a[6]为一组;...a[4],a[9]为一组,每组数据进...原创 2018-06-21 15:15:27 · 238 阅读 · 0 评论 -
(C++)数据结构排序---插入排序
插入排序基本思想:一个数组拥有n个数据,从第二个数据a[1]开始,与前面的数据a[0]比较,若a[1]<a[0],则a[1],a[0]互换位置,此时前两个数据为有序数据(由小到大);继续看第三个数据a[3],a[3]依次与前面的数据作比较,若a[3]<a[2],则二者互换位置,再与前一个数据比较,直到找到正确的位置。需要进行(n-1)趟比较,第一趟进行一次比较,第n-1趟进行(n-1)...原创 2018-06-21 11:23:37 · 157 阅读 · 0 评论 -
(C++)数据结构排序---选择排序
选择排序基本思想:一个数组a有n个数据,首先对n个数据进行(n-1)次比较,可得该组数据最大值或最小值,把该值与第一个数据(a[0])交换位置;剩下的数据,按上述方法依次取得最大(小)值,即可获得有序数据。由上可知,共需进行(n-1)趟比较。需要两个辅助空间。比较次数为:n*(n-1)/2平均情况的时间复杂度 最好情况的时间复杂度 最坏情况的时间复杂度...原创 2018-06-21 10:41:33 · 202 阅读 · 0 评论 -
(C++)数据结构排序---冒泡排序
冒泡排序是一种最简单的排序算法。基本思想:对于一组数据,从第一个开始,与其右边相邻数据作比较。若a[i]>a[i+1],则两个数据互换位置,该方法是把数据由小到大排列;如果要把数据从大到小排列,则a[i]<a[i+1]时,交换数据位置。若有n个数据,一共需要经过n-1趟比较,第一次需要比较n-1次,每趟得到一个数据的位置。上述方法中,供需比较次数为:(1+n-1)*(n-1)/2=n*...原创 2018-06-20 20:06:09 · 391 阅读 · 0 评论