数据结构
文章平均质量分 76
老北9108
这个作者很懒,什么都没留下…
展开
-
建立顺序表
//算法功能:建立顺序表//算法思路:先判断拟建立的顺序表的长度n是否大于顺序表初始化时//的存储容量LIST_INIT_SIZE,如果n > LIST_INIT_SIZE,//则按照n重新分配顺序表大小,反之则依次将数据元素存储到顺序表中。#include #include #define OVERFLOW -2#define OK 1#d原创 2014-01-11 14:34:47 · 1287 阅读 · 1 评论 -
顺序表内查找元素
//算法功能: 分别按序号和按内容在顺序表中查找元素//算法思路://GetElem(SqList &L, int i)查找顺序表L中第i个数据元素,直接在表中定位,并返回L.elem[i-1]//LocateElem(SqList &L, ElemType e)查找顺序表L中与给定值e相等的数据元素,若找到//与e相等的第1个元素则返回该元素在顺序表中的序号;否则查找失败返回0原创 2014-01-12 10:34:19 · 11388 阅读 · 1 评论 -
白话经典算法系列之七 堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总是大于或等于任何一个子节转载 2014-01-17 20:32:43 · 426 阅读 · 0 评论 -
白话经典算法系列之一 冒泡排序的三种实现
冒泡排序是非常容易理解和实现,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N不为0就重复前面二步,否则排序完成。 按照定义很容易写出代码://冒泡排序1void BubbleSort转载 2014-01-17 20:35:47 · 417 阅读 · 0 评论 -
白话经典算法系列之二 直接插入排序的三种实现
直接插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中的适当位置,直到全部记录插入完成为止。 设数组为a[0…n-1]。1. 初始时,a[0]自成1个有序区,无序区为a[1..n-1]。令i=12. 将a[i]并入当前的有序区a[0…i-1]中形成a[0…i]的有序区间。3.转载 2014-01-17 20:45:51 · 464 阅读 · 0 评论 -
白话经典算法系列之三 希尔排序的实现
希尔排序的实质就是分组插入排序,该方法又称缩小增量排序,因DL.Shell于1959年提出而得名。 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因转载 2014-01-17 20:56:34 · 495 阅读 · 0 评论