-佩奇的爸爸
分享开发经验
展开
-
静态表查找--顺序表的查找(无序)
静态查找表在查找的过程中不改变表的状态---不插入也不删除,适合不变动或者不经常变动的查找,顺序表可以使有序的也可以是无序的,如果是有序的可以使用折半查找,每查找一次,就把范围缩小一半。如果是无序的就只能从表的一端开始逐一查找了。本文先构建一个无序的顺序表,然后从表的一端进行查找指定的元素。#include#include#include#define ERROR 0#define原创 2015-12-09 15:47:50 · 1696 阅读 · 0 评论 -
冒泡排序(Bubble_Sort)
冒泡排序算法是一个耳熟能详的算法,在我们学习计算机的专业课的时候,在课本中经常会见到该程序,作为一个非常简单的例子程序。如果你不能默写该算法,那么你就没学过计算机的相关课程。好了,不说闲话了。冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。//冒泡排序(小数上升,大数下沉)#includetypedef int Status;#原创 2015-12-09 17:44:26 · 1908 阅读 · 0 评论 -
希尔排序(ShellSort)
//希尔排序#include#define MAX_SIZE 20#define N 10#define T 3struct RedType // 记录的类型{ int key; int others;};struct SqList //顺序表的类型{ RedType r[MAX_SIZE+1]; //r[0]闲置或者用作哨兵单元 int length;//顺序表的长度原创 2015-12-09 17:16:35 · 817 阅读 · 0 评论 -
一个非常重要的查找算法--哈希表查找(SearchHash)
///////////数据结构比较抽象,逻辑性较强,一些算法不能够一次理解的较好,因此经常的看一下,做一下思维的体操,你就理解的比较深入了。////////////// 哈希查找是通过计算数据元素的存储地址进行查找的一种方法。操作步骤:step1 取数据元素的关键字key,计算其哈希函数值。若该地址对应的存储空间还没有被占用,则将该元素存入,否则执行step2解决冲突。原创 2016-01-02 10:45:46 · 1429 阅读 · 0 评论 -
归并排序(MergeSort)
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。若将两个有序表合并成一个有序表,称为二路归并。 1,算法描述归并操作的工作原理如下:第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置第三步:比较两个指针所原创 2015-12-10 16:59:25 · 482 阅读 · 0 评论 -
二叉排序树
1,动态查找表在查找过程中可改变表的状态,即可插入或删除数据,它适合用在表的内容要经常变化的情况下,如飞机航班的旅客信息表。二叉排序树中的任何一个节点,其左子树中上的所有的关键字的值均小于该节点的关键字的值,其右子树上的所有的关键字的值均大于该节点的关键字的值。中序遍历二叉排序树可以得到按照关键字有序的序列。2,本程序先使用函数 InsertBST(BiTree &T,ElemTy原创 2015-12-10 17:23:29 · 378 阅读 · 0 评论 -
堆排序(HeapSort)
1,什么是堆这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构。堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素. 堆与数组之间的关系: 堆有分为大顶堆和小顶堆,堆顶的关键字是堆里所有结点关键字中最大者,称为大顶堆。2,堆排序,若在输出堆顶的最小值(最大值原创 2015-12-09 21:27:44 · 737 阅读 · 0 评论 -
简单选择排序
选择排序:每趟从待排序的记录中选出关键字最小的记录,顺序放在已排序的记录序列末尾,直到全部排序结束为止。 简单排序的处理流程:( 1 )从待排序序列中,找到关键字最小的元素;( 2 )如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换;( 3 )从余下的 N - 1 个元素中,找出关键字最小的元素,重复( 1 )、( 2 )步,直到排序结束。 //选择排序#原创 2015-12-09 21:06:06 · 641 阅读 · 0 评论 -
栈的顺序表示和实现
栈也是线性表,是操作受限的线性表。栈的操作是线性表操作的子集。因此,也可以将线性表的结构作为栈的结构。栈的精确的定义为:限定仅在表的一端进行插入或删除操作的线性表。由于栈只在表的一端进行插入和删除的操作,采用顺序存储结构,在入栈和出栈时也不需要移动栈中元素。故顺序栈比链栈的效率要高一些。//栈的顺序表示和实现(顺序栈比链栈的效率要高一些)#include#inclu原创 2015-12-09 14:48:24 · 727 阅读 · 0 评论 -
插入排序(直接插入排序,折半插入排序,2路插入排序)
经过排序的数据更加容易查找。,所谓内部排序就是先把待排序的数据都放在内存中,再进行排序。本文的插入方式包括对顺序表L作直接插入排序,对顺序表L作折半插入排序,2_路插入排序。#include#include//待排序记录的数据的类型#define MAX_SIZE 20 //一个用作示例的小顺序表的最大的长度#define N 8struct RedType //记录的类型{原创 2015-12-09 16:54:50 · 805 阅读 · 0 评论 -
快速排序算法(QuickSort)
希尔排序是一个比较重要的排序算法,需要认真的的学习一下,刚开始学习的时候觉得标胶难理解,但是不要放弃,多理解几遍就好了。记住你每看一遍都会对该算法有更近一步的了解。一,算法介绍设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。一趟快速排序的算法原创 2015-12-09 18:52:26 · 897 阅读 · 0 评论 -
静态表查找--顺序表的查找(有序)--折半查找
静态查找表在查找的过程中不改变表的状态---不插入也不删除,适合不变动或者不经常变动的查找,顺序表可以使有序的也可以是无序的,如果是有序的可以使用折半查找,每查找一次,就把范围缩小一半,如果是无序的就只能从表的一端开始逐一查找了。本文先用Create_Seq(SSTable &ST,ElemType r[],int n)构造一个无序的静态查找表,然后调用函数void Ascend(SSTabl原创 2015-12-09 16:04:36 · 10028 阅读 · 1 评论 -
链队列--队列的链式表示和实现
和栈一样,队列也是操作受限的线性表,只允许在队尾插入元素,在队头删除元素。对于链队列结构,为了便于插入元素,设立了队尾指针。这样,插入元素的操作与队列长度无关。 //链队列--队列的链式表示和实现#include#include#include#define TRUE 1#define FALSE 0#define ERROR 0typedef int Status;#d原创 2015-12-09 15:23:02 · 842 阅读 · 0 评论 -
用二叉链表存储结构构造一棵二叉树,然后用栈结构进行非递归遍历
二叉树的存储结构包括顺序存储和二叉链表存储结构,其遍历的方式分为递归遍历和非递归遍历,本文章使用二叉链表构建一棵二叉树,然后使用栈这种数据结构实现二叉树的中序非递归遍历。原创 2015-12-09 14:30:30 · 6848 阅读 · 1 评论 -
线性表的链式表示和实现
先建立一个线性单链表,并插入一些元素,然后对单链表进行了一些操作,主要是插入元素和删除元素。原创 2015-12-09 14:21:11 · 544 阅读 · 0 评论 -
线索二叉树和中序非递归遍历线索化后的二叉树
//线索二叉树#include#include#include#define OVERFLOW -2//二叉树的二叉线索存储结构enum PointerTag{Link,Thread}; //枚举类型,Link(0):指针,Thread(1):线索struct BiThrNode{ char data; BiThrNode *lchild,*rchild;//左右孩子指针原创 2015-10-25 12:19:40 · 4029 阅读 · 0 评论 -
静态队列讲解
1. 什么是静态队列.这个不难理解, 所谓静态队列就是以数组为内核的一种队列结构.至于什么是队列可以参考上面的文章.而所谓数组就是内存里的一块连续内存, 也就是说数组相邻的元素在内存里的地址也是相邻的.只需要知道数组的头部地址, 就可以快速的访问到制定元素的值. 而不需要像链表那样根据指针1个1个遍历.所以静态队列的处理速度理论上是比链式队列快的. 而相原创 2017-04-26 18:55:00 · 1390 阅读 · 0 评论