数据结构
斗锋在干嘛
这个作者很懒,什么都没留下…
展开
-
归并排序
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 算法步骤: 1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 2.设定两个指针,最初位置分别为两个已经排序序列的起始位置 3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下原创 2015-11-07 18:21:38 · 377 阅读 · 0 评论 -
八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,转载 2016-07-19 17:38:43 · 558 阅读 · 0 评论 -
构造哈夫曼树的算法
①、编写哈夫曼树中每个节点结构;②、构造哈夫曼树的算法;③、编写一个存放每个节点哈夫曼编码的类型;④、编写哈夫曼树求对应的哈夫曼编码的算法;⑤、编写主函数。代码如下:#include#include#include#include//①:typedef struct{ char data; float weight; int parent; int原创 2016-02-02 18:43:44 · 2245 阅读 · 1 评论 -
编写创建二叉树的算法
①、编写创建二叉树的算法;②、编写查找节点的算法;③、编写找孩子节点的算法;④、编写求二叉树高度的算法;⑤、编写输出二叉树的算法;⑥、编写先序遍历递归算法;⑦、编写主函数。代码如下:#include#include#include#include#define MaxSize 50//①:void CreateBTNode(BTNode * &b,cha原创 2016-02-02 18:40:41 · 1746 阅读 · 0 评论 -
二叉树的链式存储结构
基本步骤:①、二叉树的链式存储结构;②、编写创建二叉树、输出二叉树的算法;③、编写后序遍历递归算法;④、编写中序遍历递归算法;⑤、编写先序遍历递归算法;⑥、编写先序遍历非递归算法;⑦、编写中序遍历非递归算法;⑧、编写后序遍历非递归算法;⑨、编写主函数。代码如下:#include#include#include#include#define M原创 2016-02-02 18:38:18 · 879 阅读 · 0 评论 -
增强For循环
普通For循环:int [] a ={1,2,3,4,5};for(int i=0;i<a.length;i++){System.out.println(a[i]);}增强型For循环: for(int element : a){System.out.println(element);}两者效果是一样的,但是增强型For循环更简洁.如下有一个简单的例原创 2016-02-02 18:19:44 · 375 阅读 · 0 评论 -
递归删除目录下所有文件
删除目录下所有文件,这个只能用递归方法进行。递归,只有遇到出口才会停止递归,出口逻辑一定要找对。 目录下可能有文件或文件夹,文件夹下面还有文件或文件夹,所以使用递归进行便利进行删除。代码如下:import java.util.*;import java.io.File;public class DeleteAll{ public static void main(S原创 2016-02-02 18:12:04 · 388 阅读 · 0 评论 -
用栈和队列求解迷宫问题
1:①、定义一个顺序栈; ②、编写走出迷宫代码; ③、编写主函数。1、栈:#include#include#include#include#define MaxSize 100//①、定义一个顺序栈;typedef struct{ int i; int j; int di; } Box; typedef stru原创 2015-12-26 20:38:53 · 7886 阅读 · 1 评论 -
用算法计算出算术表达式:(56-20)/(4+2)的值
①、先将算术表达式转换成后缀表达式;②、然后对该后缀表达式求值;③、编写主函数,得到计算结果。#include#include#include#include#define MaxSize 50//先将算术表达式转换成后缀表达式;struct { char ch; int pri; } lpri[]={{'=',0},{'(',1},{'*',原创 2015-12-26 20:42:40 · 2808 阅读 · 1 评论 -
基数排序
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 说基数排序之前,我们简单介绍桶排序: 算法思想:是将阵列分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果原创 2015-11-26 15:13:26 · 618 阅读 · 0 评论 -
堆和栈的区别
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两转载 2015-11-21 20:37:54 · 336 阅读 · 0 评论 -
堆排序
堆排序是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 堆排序的平均时间复杂度为Ο(nlogn) 。算法步骤: 1)创建一个堆H[0..n-1] 2)把堆首(最大值)和堆尾互换 3)把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位转载 2015-11-11 21:04:18 · 324 阅读 · 0 评论 -
快速排序
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分原创 2015-11-08 16:37:48 · 333 阅读 · 0 评论 -
希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: ●插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率 ●但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接原创 2015-11-04 21:18:33 · 707 阅读 · 0 评论 -
插入排序
插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法步骤: 1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入原创 2015-11-01 20:55:45 · 331 阅读 · 0 评论 -
选择排序
选择排序(Selection sort)也是一种简单直观的排序算法。思想:还是先来看看选择排序的思想。选择排序的思想非常直接,从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。 算法步骤: 1)首先在未排序序原创 2015-11-05 12:50:24 · 573 阅读 · 0 评论 -
冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进 行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 算法步骤: 1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2)对每一对相邻元素原创 2015-11-06 16:49:03 · 298 阅读 · 0 评论 -
KMP算法的next[]数组的求法和理解
KMP算法的关键是next数组的求法在KMP算法中有个数组,叫做前缀数组,也有的叫next数组,每一个子串有一个固定的next数组,它记录着字符串匹配过程中失配情况下可以向前多跳几个字符,当然它描述的也是子串的对称程度,程度越高,值越大,当然之前可能出现再匹配的机会就更大。 用一个例子来解释,下面是一个子串的next数组的值,可以看到这个子串的对称程度很高,所以next值都比较大。...原创 2018-08-10 14:33:13 · 291 阅读 · 0 评论