
数据结构与算法
工程师WWW
R
展开
-
数据结构期末考试试题及答案
2009-01-04 11:22期末样卷参考答案一.是非题(每题1分共10分)1. 线性表的链式存储结构优于顺序存储结构。 F2. 栈和队列也是线性表。如果需要,可对它们中的任一元素进行操作。F3. 字符串是数据对象特定的线性表。T4. 在单链表P指针所指结点之后插入S结点的操作是:P->next= S ; S-> next = P->next; F原创 2009-08-17 16:22:00 · 28390 阅读 · 6 评论 -
俄国农民乘法
此算法在计算机容易高效执行.原理是:而乘2,除2都可以通过左移右移一位实现.int RussianMul(int m, int n){ int remain = 0; while(m != 1) { // odd 奇数 if (m % 2 != 0) { m = (m-1)/2; remain += n; n *= 2; } //原创 2011-12-08 10:08:35 · 2882 阅读 · 0 评论 -
关于常见排序算法的稳定性分析和结论
这几天笔试了好几次了,连续碰到一个关于常见排序算法稳定性判别的问题,往往还是多选,对于我以及和我一样拿不准的同学可不是一个能轻易下结论的题目,当然如果你笔试之前已经记住了数据结构书上哪些是稳定的,哪些不是稳定的,做起来应该可以轻松搞定。本文是针对老是记不住这个或者想真正明白到底为什么是稳定或者不稳定的人准备的。 首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证原创 2009-08-11 16:02:00 · 1419 阅读 · 0 评论 -
链表的常见操作
链表是数据结构的重要内容,在计算机程序中应用广泛,同时也是各公司笔试题目的重点。以下简单实现了链表的一些操作,包括创建、增加节点、删除节点、单链表逆置、合并有序链表等。一、链表创建 链表主要有三种形式,包括单链表、双链表和循环链表。 单链表每个节点只包含一个后驱指针,双链表节点同时包含一个前驱指针和一个后驱指针,循环链表的尾节点的后驱指向头节点。 代码如下: /*原创 2011-09-18 22:20:39 · 14310 阅读 · 3 评论 -
寻找重复的数
问题:有101个数,为[1,100]之间的数,其中一个数是重复的,如何寻找这个重复的数,其时间复杂度和空间复杂度是多少?解:假设这101个数存放在Data[101]的数组中int Data[101];for (int i = 0 ; i{Data[i] = i;}Data[100] = 6;//假设是这些数据,并将最后一个设计为重复的数,当然也可以是其它数据,此处便原创 2012-02-27 15:07:54 · 2996 阅读 · 0 评论 -
C 语言中互不相同随机数的应用研究
摘要:文章对随机数的应用问题进行了详细的分析, 给出了一种实现的算法, 并用C 语言实现。通过该问题的C 实现, 可使学习者清晰地观测到解决该问题的全过程。关键词:随机数; 算法; 随机排序1 随机数产生的方法在编程过程中,随机数有其广泛的应用价值。在C 语言中,可以利用C 语言中的种子函数srand()和伪随机函数rand()来实现。生成步骤如下:1) 首先给srand(原创 2011-11-01 22:23:07 · 2785 阅读 · 0 评论 -
Base64介绍
什么是Base64? 按照RFC2045的定义,Base64被定义为:Base64内容传送编码被设计用来把任意序列 的8位字节描述为一种不易被人直接识别的形式。(The Base64 Content-Transfer-Encoding is designed to represent arbitrary sequences of octets in a form that need not原创 2012-02-20 16:29:56 · 1314 阅读 · 0 评论 -
迪杰斯特拉算法 源程序
/**********************迪杰斯特拉算法*********************************************/#include #define INFINITY 10000 #define TRUE 1 #define FALSE 0 #define VERTEX_NUM 6 typedef struct Graph {原创 2009-09-15 10:58:00 · 1945 阅读 · 0 评论 -
二叉树
二叉树是一棵节点都不能有多于两个儿子的树。这一章,主要学习二叉树的种类和应用。一.实现typedef struct TreeNode *PrtToNode;typedef struct PrtToNode Tree;struct TreeNode{ ElementType Element; SearchTree Left;原创 2011-09-16 15:04:20 · 1881 阅读 · 0 评论 -
五分钟理解一致性哈希算法(consistent hashing)
一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似。一致性哈希修正了CARP使用的简 单哈希算法带来的问题,使得分布式哈希(DHT)可以在P2P环境中真正得到应用。 一致性hash算法提出了在动态变化的Cache环境中,判定哈希算法好坏的四个定义:1原创 2016-02-02 20:04:43 · 1027 阅读 · 0 评论 -
负载均衡算法
互联网分布式系统中,很多服务是数据存储相关的,海量访问量下,直接访问存储介质是抗不住的,需要使用cache,cache集群的负载均衡算法就成为一个重要的话题,这里对现有的负载均衡算法进行一些总结。BTW:虽然是Cache负载均衡算法小结,其实可以说是负载均衡算法小结,只是针对Cache应用场景罢了。负载均衡算法主要有:Static算法Random算法Round ro原创 2016-02-02 20:17:28 · 1001 阅读 · 0 评论 -
递推法求大数阶乘
三、递推法 递推法是利用问题本身所具有的一种递推关系求问题解的一种方法。设要求问题规模为N的解,当N=1时,解或为已知,或能非常方便地得到解。能采用递推法构造算法的问题有重要的递推性质,即当得到问题规模为i-1的解后,由问题的递推性质,能从已求得的规模为1,2,…,i-1的一系列解,构造出问题规模为I的解。这样,程序可从i=0或i=1出发,重复地,由已知至i-1规模的解,通过递推,获得规原创 2011-09-28 14:27:31 · 2228 阅读 · 0 评论 -
B树、B-树、B+树、B*树++ R tree总结
B树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right); 2.所有结点存储一个关键字; 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树; 如: B树的搜索,从根结点开始,如果查询的关键字与结点的关键字相等,那么就命中;否则,如果查询原创 2011-11-10 22:33:04 · 2387 阅读 · 0 评论 -
直接插入算法排序
void insertsort (DataType a, int n){ for (i=2; i<=n; i++) //需要n-1趟,此时数组其实是从1开始而不是0, { a[0]=a[i]; //将a[i]赋予监视哨a[0],其实a[0]相当于temp变量。 j=i; while (a[0].key<a[j-1].key) /原创 2009-09-16 23:53:00 · 1666 阅读 · 0 评论 -
各种排序算法
void shellsort(int a[],int n){ for(int d=n/2;d>=1;d=d/2) { for(int i=d;i<n;i++) //将a[i]插入到所属组的有序列段中 { int temp = a[i]; int j=i-d; while( j>=0 && temp<a[j]) {原创 2009-09-17 12:48:00 · 1392 阅读 · 0 评论 -
子数组之和
题目描述给定一个含有n个元素的整形数组a,再给定一个和sum,求出数组中满足给定和的所有元素组合,举个例子,设有数组a[6] = { 1, 2, 3, 4, 5, 6 },sum = 10,则满足和为10的所有组合是{1, 2, 3, 4}{1, 3, 6}原创 2011-10-17 11:04:57 · 3622 阅读 · 1 评论 -
Bsp 空间分割模拟实现
Bsp:二叉分割树,在游戏中用来分割局部空间,方便碰撞检测等的实现。下面介绍一种简单易用的分割方法:分割步骤:一、将空间中的所有的面,加入的根部节点。二、遍历根部节点的所有面,分别找到x、y、z的最大最小值,给根节点指定一个合适的包围空间。三、在这个节点的包围空间原创 2011-10-18 20:12:32 · 1782 阅读 · 0 评论 -
n个布尔变量值的全排列 递归算法
#include "stdio.h"void truefalse(bool tf[],int an,int n){ if(an==n) { for(int i=0;i<n;i++) { if(tf[i]) printf("true "); else printf("false "); } printf("/n"); return ; }原创 2009-08-23 16:27:00 · 2145 阅读 · 0 评论 -
C算法
算法(Algorithm):计算机解题的基本思想方法和步骤。算法的描述:是对要解决一个问题或要完成一项任务所采取的方法和步骤的描述,包括需要什么数据(输入什么数据、输出什么结果)、采用什么结构、使用什么语句以及如何安排这些语句等。通常使用自然语言、结构化流程图、伪代码等来描述算法。一、计数、求和、求阶乘等简单算法 此类问题都要使用循环,要注意根据问题确定循环变量的初值、终值或结原创 2009-08-23 21:43:00 · 1961 阅读 · 0 评论 -
用栈实现逆序输出键盘输入
#include"stdlib.h"#include"stdio.h"typedef char StackEntry;typedef struct node { //链栈的结点结构StackEntry item; //栈的数据元素类型struct node *next; //指向后继结点的指针}NODE; typedef struct stack{NODE *top;}STACK; //原创 2009-08-17 15:38:00 · 5115 阅读 · 1 评论 -
根据前序中序遍历建立二叉树
根据前序中序遍历建立二叉树(2009-03-20 20:15:28) 【前言】 这个选题源自课上的一个习题,题目提供了二叉树的前序遍历和中序遍历,要求出整个二叉树。刚一做这道题时,还有些迷惑。但是,既然答案是确定的,就一定存在着算法,来求出这个二叉树。经过一些摸索,最终确定了求解算法。 【分析】 二叉树的遍历一共有四种方法,分原创 2009-09-10 20:08:00 · 4161 阅读 · 0 评论 -
海量数据面试题整理
1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文件的大约为3原创 2011-11-05 16:51:38 · 2763 阅读 · 2 评论 -
二分图的最佳匹配(KM 算法)
KM算法求最小权二分匹配,模板题,构图很简单,直接把人当作左边的点,房子当作右边的点,两者之间的曼哈顿距离当作权值即可。第一次搞带权二分匹配的题,就是用KM算法求最小权的时候要加个处,由于KM求的是最大权,所以在套模板之前把权值都取下相反值最后再把KM算法求出来的最大权值取反即可。Kuhn-Munkras算法流程: (1)初始化可行顶标的值 (2)用匈牙利算法寻找完原创 2011-11-29 10:44:06 · 9498 阅读 · 0 评论 -
C语言之尾队列tailq
queue和list的结构定义和操作都在'sys/queue.h'中完成, 主要定义了下面四种数据结构:单向列表(single-linked lists)单向尾队列(single-linked tail queue)列表(lists)尾队列(tail queues)尾队列图示 尾队列常用宏宏名称操作原创 2016-05-30 16:51:34 · 3811 阅读 · 0 评论