随笔分类 -  数据结构

对内存重叠的深入认识
摘要:内存重叠:拷贝的目的地址在源地址范围内。所谓内存重叠就是拷贝的目的地址和源地址有重叠。在函数strcpy和函数memcpy都没有对内存重叠做处理的,使用这两个函数的时候只有程序员自己保证源地址和目标地址不重叠,或者使用memmove函数进行内存拷贝。memmove函数对内存重叠做了处理。现在来看函数strcpy原型:extern char *strcpy(char *dest,char *source);功能:把source所指由NULL结束的字符串复制到dest所指的数组中。说明:source和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳source的字符串。返回指向des 阅读全文

posted @ 2012-09-09 15:45 原来... 阅读(755) 评论(0) 推荐(0) 编辑

B树、B-树、B+树、B*树
摘要:B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: http://p.blog.csdn.net/images/p_blog_csdn_net/manesking/1.JPG B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询关键字比结点关键字小,就进入左儿子;如果比结点关键字大,就进入右儿子;如果左儿子或右儿子的指针为空,则报告... 阅读全文

posted @ 2012-09-09 11:10 原来... 阅读(243) 评论(0) 推荐(0) 编辑

归并排序--详解
摘要:归并排序(Merge Sort)是利用"归并"技术来进行排序。归并是指将若干个已排序的子文件合并成一个有序的文件。1、算法基本思路 设两个有序的子文件(相当于输入堆)放在同一向量中相邻的位置上:R[low..m],R[m+1..high],先将它们合并到一个局部的暂存向量R1(相当于输出堆)中,待合并完成后将R1复制回R[low..high]中。(1)合并过程 合并过程中,设置i,j和p三个指针,其初值分别指向这三个记录区的起始位置。合并时依次比较R[i]和R[j]的关键字,取关键字较小的记录复制到R1[p]中,然后将被复制记录的指针i或j加1,以及指向复制位置的指针p加1 阅读全文

posted @ 2011-09-09 09:53 原来... 阅读(3108) 评论(0) 推荐(0) 编辑

红黑树 VS AVL树
摘要:1 好处 及 用途红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。红黑树能够以O(log2 n) 的时间复杂度进行搜索、插入、删除操作。此外,由于它的设计,任何不平衡都会在三次旋转之内解决。当然,还有一些更好的,但实现起来更复杂的数据结构 能够做到一步旋转之内达到平衡,但红黑树能够给我们一个比较“便宜”的解决方案。红黑树的算法时间复杂度和AVL相同,但统计性能比AVL树更高。当然,红黑树并不适应所有应用树的领域。如果数据基本上是静态的,那么让他们待在他们能够插入,并且不影响平衡的地方会具有更好的性能。如果数据完全是静态的,例如,做一个哈希表,性能可 阅读全文

posted @ 2011-08-10 10:23 原来... 阅读(1623) 评论(0) 推荐(0) 编辑

对 带头结点的单链表 的操作
摘要://带头结点的单链表#include<iostream>using namespace std;typedef struct student{ int data; struct student *next;}node;node * creat() //创建单链表{ node *head,*p,*s; int x,cycle=1; head=(node *)malloc(sizeof(node)); p=head; while(cycle) { cout<<"请输入一直不为0的数,输入0则结束"<<endl; cin>>x; i 阅读全文

posted @ 2011-08-03 14:26 原来... 阅读(1042) 评论(1) 推荐(0) 编辑

外排序(磁盘排序)之多路归并排序的简单实现 C++
摘要:外排序(磁盘排序)之多路归并排序的简单实现(转)摘要:本文简要介绍了当数据量大到不适合在内存中排序时,利用磁盘进行排序的多路归并算法。关键字:外排序,磁盘排序,多路归并 下面以一个包含很多个整数的大文件为例,来说明多路归并的外排序算法基本思想。假设文件中整数个数为N(N是亿级的),整数之间用空格分开。首先分多次从该文件中读取M(十万级)个整数,每次将M个文件在内存中使用快排序之后存入临时文件,然后使用多路归并将临时文件中的数据牌号序存入输出文件。显然,该排序算法需要对每个整数做2次磁盘读和2次磁盘写。 下面代码是基于以上思想对包含大量整数文件的从小到大排序的一个简单实现,这里没有使用内存缓冲区 阅读全文

posted @ 2011-07-30 17:21 原来... 阅读(7957) 评论(0) 推荐(0) 编辑

数据结构的排序算法的C++实现代码
只有注册用户登录后才能阅读该文。

posted @ 2011-07-29 22:05 原来... 阅读(30) 评论(0) 推荐(0) 编辑

各种内部排序算法的实现(c++实现)
摘要:#include <iostream>using namespace std; //调试用输出template <class Type>void Print(Type a[], unsigned int n){cout<<endl;for(int i=0; i<n; i++){ cout.width(4); cout<<a[i];}cout<<endl;}//冒泡排序(升序)//时间复杂性O(n*n)template <class Type>void BubbleSort(Type a[], unsigned int 阅读全文

posted @ 2011-07-29 22:03 原来... 阅读(922) 评论(0) 推荐(0) 编辑

关于一道算法题《编写算法,从10亿个浮点数当中,选出其中最大的10000个》(转)
只有注册用户登录后才能阅读该文。

posted @ 2011-07-29 21:36 原来... 阅读(76) 评论(2) 推荐(0) 编辑

最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
摘要:Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。 Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。其基本思想是,设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。初始时,S中仅含有源。设u是G的某一个顶点,把从源到u且中间只经过S中顶点的路称为从源到u的特殊路径,并用数组di 阅读全文

posted @ 2011-07-28 12:57 原来... 阅读(818) 评论(0) 推荐(0) 编辑

二叉树的创建及各种遍历
摘要:#include"stdio.h"#include"string.h"#include<stdlib.h>#include<malloc.h>//#include<system>#define Max 20 /*结点的最大个数*/typedef struct node{ char data; struct node *lchild,*rchild;}BinTNode; /*自定义二叉树的结点类型*/typedef BinTNode *BinTree; /*定义二叉树的指针*/int NodeNum,leaf; /*No 阅读全文

posted @ 2011-07-28 11:46 原来... 阅读(559) 评论(0) 推荐(0) 编辑

二叉树层次遍历
摘要://二叉树层次遍历算法#include <stdio.h>#include <malloc.h>#define MaxSize 1000typedef char ElemType; typedef struct node { ElemType data; struct node *lchild; struct node *rchild;} BTNode;//创建二叉树void CreateBTNode(BTNode *&b,char *str){ BTNode *St[MaxSize],*p=NULL; int top=-1,k,j=0; char ch; b= 阅读全文

posted @ 2011-07-28 11:40 原来... 阅读(835) 评论(0) 推荐(0) 编辑

二叉树的前序遍历(包括树的定义与创建)
摘要:#include <cstdlib>#include <iostream>using namespace std;struct BiTree ///< 声明二叉树的结构 { int data; BiTree *left; BiTree *right;};// 插入节点值BiTree* InsertNode(BiTree* pRoot,int node) { BiTree* pCurrNode; ///< 声明目前节点指针 BiTree* pParentNode; ///< 声明父亲接点指针 BiTree* pNewNode = new BiTree; 阅读全文

posted @ 2011-07-26 20:28 原来... 阅读(598) 评论(0) 推荐(0) 编辑

赫夫曼编程C语言实现
摘要:问题描述】 利用Huffman编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接受端将传来的数据编码进行译码(复原)。对于有些信道,每端都需要一个完整的编/译码系统。试为这样的信息收发站编写一个Huffman的编/译码系统。给定一组权值{7,9,5,6,10,1,13,15,4,8},构造一棵赫夫曼树,并计算带权路径长度WPL。【数据描述】//- - - - - 赫夫曼树的存储表示 - - - - -typedef struct { unsigned int weight; unsigned int parent,l 阅读全文

posted @ 2011-07-25 19:22 原来... 阅读(1259) 评论(0) 推荐(0) 编辑

导航