
数据结构与算法
文章平均质量分 87
Alexwym
这个作者很懒,什么都没留下…
展开
-
堆的实现(数据结构)
一、问题描述堆是什么?堆也叫做优先队列,一些按照重要性或优先级来组织的对象称为优先队列。为什么需要堆?在现实生活中,存在许多需要从一群人、一些任务或一些对象中找出“下一位最重要”目标的情况。例如:在平时处理事情的时候我们总会先把“下一个最重要的”的事情取出来先处理。在处理的过程中,可能还会有其他的事情加进来。因此在事情处理完的事情,我们又要重新找出“下一个最重要”的事情进行处理。如何......原创 2018-06-12 12:13:06 · 2078 阅读 · 2 评论 -
n皇后问题(分支限界法)
一、问题描述*问题描述:在n*n格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题等价于在n*n的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。*算法设计:设计一个解n皇后问题的队列式分支限界法,计算在n*n个方格上放置彼此不受攻击的n个皇后的一个放置方案。*数据输入:由文件input.txt给...原创 2018-07-01 11:35:22 · 33309 阅读 · 11 评论 -
C++石子合并问题(动态规划)
一、问题描述问题描述:在一个圆形操场的四周摆放着n堆石子。现要将石子有次序地合并成一堆。规定每次只能选择相邻的两堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。算法设计:试设计一个算法,计算出将n堆石子合并成一堆的最小得分和最大得分。样例输入:由input.txt提供输入数据样例输出:输出数据保存到output.txt输入文件示例:input.txt44 4......原创 2018-06-25 10:55:54 · 18760 阅读 · 6 评论 -
C++数字三角形问题(动态规划)
一、问题描述★问题描述:给字一个由n行数字组成的数字三角形(等腰三角形)。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。★算法设计:对于给定的由n行数字组成的数字三角形,计算从三角形的项至底的路径经过的数字和的最大值。★数据输入:由文件input.txt提供输入数据。文件的第1行是数字三角形的计数n,1≤n≤100。接下来n行是数字三角形各行中的数字。所...原创 2018-06-25 10:46:24 · 10402 阅读 · 0 评论 -
JAVA哈希表的构建(拉链法)
哈希表是一个用途很广泛的数据结构,常用于需要进行大集合搜索的地方,比如腾讯QQ。对于上线的用户我们需要将其添加到一个集合中,以便对其进行各种处理。那么这个集合该采取哪种数据结构呢?最基本的数据结构就两种:链表和数组。在前面的文章中,我们曾经比较过链表和数组的优缺点。链表适用于插入和删除操作较多的集合,但是不适用于取值操作多的集合。而数组不适用于插入和删除操作较多的集合,但是适用于取值操作较多的...原创 2018-07-15 19:21:02 · 5869 阅读 · 3 评论 -
文件压缩(二)——英文字符串的处理
文件压缩(一)——Huffman树的构建在前一篇文章中,我们已经构建了一棵Huffman树了,今天我们将利用这棵Huffman树来实现英文字符串的压缩和解压缩。一、字符串在JAVA中的储存String字符串相当于一个char型数组,和C++不同的是,JAVA采用的是unicode编码,每个char型数据占2个字节,只不过对于ASCII码中的字符,它的第一个字节位全0。浪费了一些空间。而...原创 2018-07-07 19:57:01 · 851 阅读 · 0 评论 -
JAVA用数组实现动态数组——顺序表
数组是我们在编程的过程中最常用到的数据结构。一般我们用的都是定长数组,动态数组用的会比较少。但是有时,或者说有很多时候,定长数组并不能很好地满足我们的要求,于是我们只能用动态数组。在JAVA中,有一个封装好的API——ArrayList,就是一个动态数组,在C++中有一个vector也是动态数组。我们可以直接拿过来使用。但是有时我们可能需要自己定制一个动态数组,以便更好地解决我们的问题。今天,我们...原创 2018-07-07 18:14:55 · 4912 阅读 · 0 评论 -
文件压缩(一)——Huffman树的构建
在传输文件的过程中我们经常会先对文件进行压缩,然后再传输。等接收到文件后,在进行解压缩。于是也打算自己动手写一个简单的文件压缩程序,大致分为三个过程,Huffman树的构建,利用哈夫曼树对输入的字符串进行压缩和解压缩处理,文件处理。今天,我们先来实现Huffman树的构建。在动手写代码之前我们先做一些准备工作。(这里不会详细介绍Huffman树,对Huffman基本概念不了解的同学请自行查阅其他资...原创 2018-07-03 21:36:20 · 575 阅读 · 0 评论 -
链表的实现(Java)
前面我们已经使用顺序表实现了一个动态数组,当然动态数组还有另一种实现形式——链表。这里就涉及到另一个问题,JAVA中有没有指针?严格来说JAVA是没有真正意义上的指针的,它只有引用。具体的分析我们这里暂不做讨论。接下来我们就利用JAVA的引用来实现一个动态数组,也就是链表。一、链表的物理结构链表是由一个个独立的节点组织起来的,它具有真正意义上的动态。顺序表在计算机内部是顺序储存的,它每次在...原创 2018-07-08 17:17:39 · 3902 阅读 · 0 评论 -
七种排序算法的具体实现(Java)
排序算法根据不同的算法思想往往有很多不同的实现。近期,个人整理了常见的七种算法,并用java对各个算法进行了具体实现,包括:插入排序、冒泡排序、选择排序、shell排序、归并排序、快速排序以及堆排序。一、插入排序算法步骤:从第二个数值开始依次往后遍历。将第k个数值放到前面已经排好序的k-1个数值的合适位置。所谓的合适位置(以从小到大排序为例)就是该位置的前一个数值小于number[...原创 2018-10-08 18:57:33 · 688 阅读 · 0 评论