随笔分类 -  数据结构与算法

摘要:// 算法.cpp : 定义控制台应用程序的入口点。//对于堆排序来说,逻辑上是树的形式,实际存储的形式还是数组。只是对下标进行一定的计算获得逻辑上树的形式。//此堆的结构为0号位为根结点,没有左子树,右边接着以1号位置为根结点的子树。#include "stdafx.h"#include <iostream>using namespace std;const int HEAP_SIZE = 13; //堆大小int parent(int);int left(int);int right(int);void Max_Heapify(int [], int, in 阅读全文
posted @ 2012-03-03 11:48 java简单例子 阅读(179) 评论(0) 推荐(0) 编辑
摘要:// 算法.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <ctime>using namespace std;void QuickSort(int e[], int first, int end);int _tmain(int argc, _TCHAR* argv[]){ srand(unsigned(time(NULL)));//set 种子 int t_nArray[10]; //产生随即数组 for(int i = 0; i < 10; i++) 阅读全文
posted @ 2012-03-03 10:32 java简单例子 阅读(248) 评论(0) 推荐(0) 编辑
摘要:下面一段源自huffman编码,其中体现了堆的具体过程。weight为类的成员变量。void HuffmanTree::CreateDate(){ weight = new int[5];//程序在开始时,weight指向不确定位置 //直到CreateDate运行完成,将所有数据存在连续堆中,然后将weight指向这片区域。 weight[0] = 10; weight[1] = 5; weight[2] = 7; weight[4] = 13;}程序开始,初始化时,weight指向不确定位置,当上面程序在内存中运行时,将各个数据存储在堆中,运行完成后,将... 阅读全文
posted @ 2011-07-28 12:38 java简单例子 阅读(349) 评论(0) 推荐(0) 编辑
摘要:赫夫曼编码是该思想的应用,将频率出现较多的字母定义为长度较短的二进制,将出现频率小的定义为长度大的二进制,这样有效的提高了存储能力,赫夫曼树的用处还很多,这种思想可以提高程序运行效率,如在多个判断语句中,可以将访问较多的条件放在第一个位置,减小其访问权重。#ifndef HUFFMANNODE_H#define HUFFMANNODE_H#include <iostream>using namespace std;class HuffmanNode{public: HuffmanNode(); HuffmanNode(int weight); void SetWeight(int 阅读全文
posted @ 2011-07-28 11:26 java简单例子 阅读(211) 评论(0) 推荐(0) 编辑
摘要:#ifndef RECORD_H#define RECORD_H#include <iostream>using namespace std;class Record{ public: Record(); Record(string name, int age); virtual ~Record(); void Display(); protected: private: public: string name; int age;};#endif // RECORD_H#ifnde... 阅读全文
posted @ 2011-07-25 14:53 java简单例子 阅读(304) 评论(0) 推荐(0) 编辑
摘要:二叉树的遍历如果使用递归调用基本没什么问题,这里主要是讲如何使用非递归方法实现二叉树的遍历。由于递归调用程序实际上使用了栈来保存方法中的变量值,在非递归遍历的方法中我们需要基于栈的方法。先来看看这个方法01/// <summary> 02/// 非递归中序遍历二叉树 03/// </summary> 04/// <param name="root"></param> 05static void InOrderTraverse(BinaryTreeNode root) 06{ 07BinaryTreeNode temp = ro 阅读全文
posted @ 2011-07-25 13:51 java简单例子 阅读(1952) 评论(0) 推荐(0) 编辑
摘要:一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的 全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另 一块区域。 - 程序结束后由系统释放。 4、文字... 阅读全文
posted @ 2011-07-25 13:45 java简单例子 阅读(116) 评论(0) 推荐(0) 编辑
摘要:递归算法向非递归算法转换递归算法实际上是一种分而治之的方法,它把复杂问题分解为简单问题来求解。对于某些复杂问题(例如hanio塔问题),递归算法是一种自然且合乎逻辑的解决问题的方式,但是递归算法的执行效率通常比较差。因此,在求解某些问题时,常采用递归算法来分析问题,用非递归算法来求解问题;另外,有些程序设计语言不支持递归,这就需要把递归算法转换为非递归算法。 将递归算法转换为非递归算法有两种方法,一种是直接求值,不需要回溯;另一种是不能直接求值,需要回溯。前者使用一些变量保存中间结果,称为直接转换法;后者使用栈保存中间结果,称为间接转换法,下面分别讨论这两种方法。1. 直接转换法直接转换法通常 阅读全文
posted @ 2011-07-25 09:31 java简单例子 阅读(1765) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示