原文: 一步一步写算法(之线性堆栈) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 前面我们讲到了队列,今天我们接着讨论另外一种数据结构:堆栈。堆栈几乎是程序设计的命脉,没有堆栈就没有函数调用,当然也就没有软件设计。那么堆栈有什么特殊的属性呢...
分类:
编程语言 时间:
2014-12-11 10:22:06
阅读次数:
185
用Java模拟一个堆栈或者队列数据结构。
首先得明白堆栈和队列的数据结构:
堆栈:先进后出
队列:先进先出
LinkedList中刚好有addFirst()和addLast()方法。
[java] view
plaincopyprint?
public class Stack
{
public static void m...
分类:
编程语言 时间:
2014-12-05 14:18:45
阅读次数:
236
堆排序(heap sort) 具体解释 及 代码(C++)本文地址:http://blog.csdn.net/caroline_wendy堆排序包括两个步骤:第一步:是建立大顶堆(从大到小排序)或小顶堆(从小到大排序), 从下往上建立; 如建堆时, s是从大到小;第二步: 是依次交换堆顶和堆底, 并...
分类:
编程语言 时间:
2014-10-31 13:23:24
阅读次数:
275
题意:
给一张无向图,中午12:00从0点出发(充满电,支持240分钟的路程),在每个点都能充电,充2分钟的电能跑1分钟,每条路按分钟分为若干个时间段,每个时间段内通过这条路的时间为ti,问到达n-1号点最少要多少时间。
分析:
BFS+优先队列。按时间优先出队,要注意将电量的存储*2(当然有其他方法),因为如果充电时间为奇数,用int存会丢失0.5。其次是要跑两个周期(两天)。判重的话有很多方法,较普遍的是开两维,位置和剩余电量,我的方法是开一维松弛,将电量化为0(x.time-x.power)。要小心的...
分类:
其他好文 时间:
2014-10-07 18:43:34
阅读次数:
239
#include
#include
void MaxHeapify(int a[],int length,int i);
void BuildMaxHeapify(int a[],int length);
void HeapSort(int a[],int length);
void main(void)
{
int i;
int a[10]={1,3,4,2,1,3,2,19,4,...
分类:
其他好文 时间:
2014-10-07 00:45:41
阅读次数:
196
堆是二叉树中的一种,是一种常见的数据结构,具有以下性质:任意节点小于(最小堆)或大于(最大堆)它的所有后裔,最小元或最大元在堆的根上(堆序性)。堆总是一棵完全二叉树 最大堆如图一,最小堆如图二。 最小堆的实现如下: MinHeap.h 1 #include "stdafx.h" 2...
分类:
其他好文 时间:
2014-09-30 18:57:49
阅读次数:
188
第三章解决堆栈的编程问题堆栈是一种特殊的线性表,是一种只允许在表的一端进行插入或删除操作的线性表。堆栈的主要特点是后进先出。用一片连续的存储空间来存储栈中的元素,这样的栈称为顺序栈。用链式存储结构存储的栈称为链栈。汉诺塔问题汉诺塔问题来自一个古老的传说:在..
分类:
其他好文 时间:
2014-09-21 03:22:30
阅读次数:
264
要了解堆排序,首先要了解堆的概念,因为本文主要研究堆排序的算法,此处对数据结构堆只是给出概念:n个元素的序列{k1,k2,...kn},当且仅当满足如下关系时,称之为堆。
k[i] (或
k[i] >= k[2i]且k[i] >= k[2i+1])
比如:序列96、83、27、38、11、09(或12、36、24、85、47、30、53、91)都是堆。
如果将堆对应的一维数...
分类:
其他好文 时间:
2014-09-20 08:52:15
阅读次数:
188
Heapsort (堆排序)是最经典的排序算法之一,在google或者百度中搜一下可以搜到很多非常详细的解析。同样好的排序算法还有quicksort(快速排序)和merge sort(归并排序),选择对这个算法进行分析主要是因为它用到了一个非常有意思的算法技巧:数据结构 - 堆。而且堆排其实是一个看...
分类:
编程语言 时间:
2014-09-16 23:29:41
阅读次数:
406
堆是一种非常有用的数据结构,下面的C#以插入数据的方式创建最大堆,然后实现了堆的插入和删除操作。...
分类:
其他好文 时间:
2014-09-16 14:19:00
阅读次数:
127