数据结构与算法
李生龙
这个作者很懒,什么都没留下…
展开
-
libsodium 手册
https://byronhe.gitbooks.io/libsodium/content/usage/转载 2020-08-13 17:32:53 · 697 阅读 · 0 评论 -
查找算法(顺序查找、二分法查找、二叉树查找、hash查找)
http://student.zjzk.cn/course_ware/data_structure/web/chazhao/chazhao9.3.1.5.htm查找功能是数据处理的一个基本功能。数据查找并不复杂,但是如何实现数据又快又好地查找呢?前人在实践中积累的一些方法,值得我们好好学些一下。我们假定查找的数据唯一存在,数组中没有重复的数据存在。(1)转载 2016-05-10 10:35:17 · 7239 阅读 · 0 评论 -
一个最基本的二叉树
一个最基本的二叉树~~头文件BiTree.h[cpp] view plaincopytypedef int Item; typedef struct node { struct node * lchild; struct node * rchild; Item data; }BiTN转载 2015-05-18 20:21:11 · 380 阅读 · 0 评论 -
队列的实现
下面是队列的各种C语言操作的实现: 先是结构体的定义:typedef struct QNode{ QElemType data; struct QNode *next;}*QueuePtr;typedef struct Queue{ QueuePtr front,rear; //对头队尾指针}LinkQueue;转载 2015-05-08 11:12:00 · 522 阅读 · 0 评论 -
栈的实现
首先还是数据结构的定义:typedef struct Stack{ SElemType *base; SElemType *top ; int stacksize;}SqStack; 下面是各种操作的具体的实现,因为栈和队列在后面的树的操作中,会经常的用到,所以,这里会影响到后面树的实现。Sta转载 2015-05-08 11:10:16 · 384 阅读 · 0 评论 -
函数的递归调用(阶乘函数&斐波那契数列)
递归问题是一个说简单也简单,说难也有点难理解的问题.我想非常有必要对其做一个总结.首先理解一下递归的定义,递归就是直接或间接的调用自身.而至于什么时候要用到递归,递归和非递归又有那些区别?又是一个不太容易掌握的问题,更难的是对于递归调用的理解.下面我们就从程序+图形的角度对递归做一个全面的阐述.我们从常见到的递归问题开始:1 阶层函数#include iostream>usin转载 2015-05-18 19:07:04 · 1806 阅读 · 0 评论 -
字符串操作原型
char *strcpy(char *s1,const char *s2);//该函数把s2指向的字符串复制到s1指向的位置,返回值是s1char *strncpy(char *s1,const char *s2,size_t n);//该函数把s2指向的字符串复制到s1的位置,最多复制n个,返回值是s1char *strcat(char *s1,const char *s2);/转载 2015-05-18 13:49:25 · 428 阅读 · 0 评论 -
如何判断链表中是否有环
单向链表是最常用的数据结构之一,因此总结其常见的问题及其解决方案是很有意义的。 问题1:如何判断一个单向链表是否有环?如果有,如何找到其入口节点的指针? 算法思想:用两个指针p1,p2同时指向链表的头部,p1一次移动一步,p2一次移动两步,如果最终p1和p2重合则说明链表有环,如果p2走到空指针(链表的结尾)则说明链表无环; 如果最终p1转载 2015-05-26 20:19:44 · 437 阅读 · 0 评论 -
查找单链表中间节点
题目的解法当然不可能是一次遍历得到链表长度,然后再遍历一半,那是最最没办法的办法。在链表中很多题目的解法都跟大小指针有关。比如这道题目,设立两个指针,一个单步走,一个两步走,当大步指针到达链表尾部的时候,小步指针也正好位于链表中间位置。算法实现如下:[cpp] view plaincopyNode * findMiddleNodeOfLi转载 2015-05-26 20:23:18 · 406 阅读 · 0 评论 -
双向链表实现
首先编写头文件,头文件里做相关的定义和声明,DList.h内容如下:[cpp] view plaincopy#ifndef DList_H #define DList_H typedef int Item; typedef struct Node * PNode; typedef PNode Position; /*定转载 2015-05-18 20:22:19 · 455 阅读 · 0 评论 -
求两个数组的交集
问题: 给你两个排序的数组,求两个数组的交集。比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那么交集就是 3 5.思路:1. 每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存。该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度。2. 因为A B 都排过序,所以,每一次从B数组取值后,可以利用二分查找看是否在数转载 2015-05-26 20:02:53 · 401 阅读 · 0 评论 -
基于一致性hash算法 C++语言的实现详解
http://www.warting.com/program/201601/127209.html 一致性hash算法实现有两个关键问题需要解决,一个是用于结点存储和查找的数据结构的选择,另一个是结点hash算法的选择。 首先来谈一下一致性hash算法中用于存储结点的数据结构。通过了解一致性hash的原理,我们知道结点可以想象为是存储在一个环形的数据结构上(如下图),结点A、转载 2016-03-23 16:45:43 · 305 阅读 · 0 评论 -
白话经典算法系列之一 冒泡排序的三种实现
http://blog.csdn.net/morewindows/article/details/6657829冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。3.N=N-1,如果N转载 2016-04-28 13:51:41 · 289 阅读 · 0 评论 -
八大排序算法
概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。我们这里说说八大排序就是内部排序。 当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,转载 2016-05-10 17:55:32 · 540 阅读 · 0 评论 -
必须掌握的八种排序(1-2)--插入排序,希尔排序
http://blog.csdn.net/tanggao1314/article/details/50667616 算法专栏版权声明:本文为博主原创文章,转载请指明 http://blog.csdn.net/tanggao1314/很多人算法和数据结构不好,归根结底就是基础不扎实,算法和数据结构不好的话,达到的高度肯定不会很高,最近重新加强了一下自己的算法基础,转载 2016-05-10 18:05:30 · 316 阅读 · 0 评论 -
B-树和B+树的应用:数据搜索和数据库索引
http://blog.sina.com.cn/s/blog_4e0c21cc01010itp.htmlB-树 1 .B-树定义B-树是一种平衡的多路查找树,它在文件系统中很有用。定义:一棵m 阶的B-树,或者为空树,或为满足下列特性的m 叉树:⑴树中每个结点至多有m 棵子树;⑵若根结点不是叶子结点,则至少有两棵子树;⑶除根结点之外的所有转载 2016-05-11 20:35:51 · 355 阅读 · 0 评论 -
二叉树的深度优先遍历和广度优先遍历
转自:http://www.blogjava.net/fancydeepin/archive/2013/02/03/395073.html深度优先搜索算法(Depth First Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点转载 2016-05-29 21:44:15 · 523 阅读 · 0 评论 -
二叉树的操作 深度广度遍历,二叉树递归和非递归遍历
二叉树的操作参考:[1]http://www.cnblogs.com/dolphin0520/archive/2011/08/25/2153720.html [2]http://www.bccn.net/article/kfyy/sjjg/200706/4585.html[cpp] view plain copy#inc转载 2016-05-29 21:45:34 · 1005 阅读 · 0 评论 -
编译原理之词法分析、语法分析、语义分析
词法分析(Lexical analysis或Scanning)和词法分析程序(Lexical analyzer或Scanner) 词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用lex等工具自动生成。语法分析(Syntax ana...转载 2018-03-28 20:02:15 · 2812 阅读 · 0 评论 -
输入两个链表,找出它们的第一个公共结点。
题目:输入两个链表,找出它们的第一个公共结点。链表结点定义如下:struct ListNode{ int m_nKey; ListNode *m_pNext;}; 解决办法:首先遍历两个链表得到它们的长度,就能知道哪个链表比较长,以及长的链表比短的链表多几个结点。在第二次遍历的时候,在较长的链表上先走若干步,接着再同时在两个链表上转载 2015-05-26 20:17:57 · 473 阅读 · 0 评论 -
二叉树的遍历——递归和非递归
二 叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是 递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中, 前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。一.前序遍历转载 2015-05-26 20:13:59 · 448 阅读 · 0 评论 -
队列实现
[文件] DynaLnkQueue.cpp ~ 5KB 下载(215)001/***002*DynaLnkQueue.cpp - 动态链式队列,即队列的动态链式存储实现003*004*转载 2013-02-25 18:52:34 · 414 阅读 · 0 评论 -
C/C++ 笔试、面试题目大汇总
这些东西有点烦,有点无聊。如果要去C++面试就看看吧。几年前网上搜索的。刚才看到,就整理一下,里面有些被我改了,感觉之前说的不对或不完善。 1.求下面函数的返回值( 微软)int func(x) { int countx =0; while(x) { countx ++; x = x&(x-1); } return countx; }转载 2013-01-22 19:44:22 · 577 阅读 · 0 评论 -
双链表
一个完整的双向链表程序(C语言版) #include #include typedef struct tagDbNode{int data;struct tagDbNode * left;struct tagDbNode * right;} DbNode, * pdbNode;//创建结点pdbNode CreateNode(int data){转载 2013-01-20 15:18:44 · 503 阅读 · 0 评论 -
10种排序算法总结
10种排序算法总结2011-09-20 12:01:17 我来说两句 收藏 我要投稿排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准: (1)执行时间 (2)存储空间 (3)编程工作 对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,转载 2013-01-09 11:36:37 · 600 阅读 · 0 评论 -
结构体空间计算
C语言中的构造数据类型有三种:数组、结构体和共用体。数组是相同类型的元素的集合,只要会计算单个元素的大小,整个数组所占空间等于基础元素大小乘上元素的个数。结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。看下面这样的一个结构体:struct stu1转载 2012-09-21 17:51:43 · 722 阅读 · 0 评论 -
数据结构学习
213997058 linux c语言开发交流群欢迎大家加入学习 本章的重点是了解数据结构的逻辑结构、存储结构、数据的运算三方面的概念及相互关系,难点是算法复杂度的分析方法。 需要达到层次的基本概念和术语有:数据、数据元素、数据项、数据结构。特别是数据结构的逻辑结构、存储结构及数据运算的含义及其相互关系。数据结构的两大类逻辑结构和四种常用的存储表示方法。 需要达到层次的内容有算法原创 2011-12-14 15:06:24 · 1415 阅读 · 0 评论 -
队列和链表
队列维基百科,自由的百科全书本文是介绍程式设计上的意义。关于队列军事上的意义,详见“军事组织”。提示:本条目的主题不是排队。队列,又称为伫列(英文queue),是先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行转载 2011-12-12 11:32:16 · 1321 阅读 · 0 评论 -
链表的插入、删除、排序、追加等源码
#include #include typedef struct manage{int num;int name; struct manage *next;}STU;STU *creat_link(int num){STU *head,*pf,*pb;int i;for(i=0;i{pb=(STU *)mall原创 2011-12-13 12:41:54 · 581 阅读 · 0 评论 -
深入浅出linux内核源代码之双向链表list_head(上)
深入浅出linux内核源代码之双向链表list_head(上)分类: C/C++ linux2010-04-07 12:14 1895人阅读 评论(1) 收藏 举报 原创文章,转载请注明出处,谢谢! 作者:清林,博客名:飞空静渡 前言: 在linux 源代码中有个头文件为list.h 。很多linux 下的源代码都转载 2012-03-08 19:34:22 · 525 阅读 · 0 评论 -
openssl编程轻松入门(含完整示例)
2012-06-04 23:50:31 openssl编程入门(含完整示例).pdf openssl编程轻松入门(含完整示例)一见1. 编写目的第一次跑起openssl示例并不太简单,本文的目的是为了让这个过程变得非常简单。在开始之前,要非常感谢周立发同学,正是通过他共享的示例,较轻松的入了门。本文档对他共享的示例中的一个小转载 2014-05-15 15:07:25 · 897 阅读 · 0 评论 -
生产者消费者测试
#include #include #include using namespace std;pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER;pthread_cond_t event = PTHREAD_COND_INITIALIZER;int num = 0;int countP = 0;bool原创 2014-05-26 11:06:42 · 575 阅读 · 0 评论 -
合并两个排序的链表
题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的。例如下图中的链表1和链表2,则合并之后的升序链表如链表3所示。 链表结点定义如下:struct ListNode{ int m_nValue; ListNode *m_pNext;};转载 2015-05-26 20:10:09 · 350 阅读 · 0 评论 -
栈和队列的相互实现
以STL中Queue和Stack为例:1.Queue和Stack的特点 Queue支持的操作: queue void push(int elem) //向队列中添加元素 void pop()转载 2015-05-08 11:19:54 · 338 阅读 · 0 评论 -
单链表各种操作的C语言实现(一)
最近,从新复习了一下数据结构中比较重要的几个部分,现在把自己的成果记录下来,主要就是仿照严蔚敏的《数据结构》(C 语言版),中的例子和后面的习题进行改编的。首先,是单链表的各种实现,其中,包含了一些常考的知识点。例如,单链表的逆置,单链表的合并,找到单链表的中间节点等的算法实现。 下面这个是单链表的结构体的定义: typedef struct LNode{转载 2015-05-08 11:15:05 · 623 阅读 · 0 评论 -
单链表操作
根据数据结构书上提供的算法,自己实践将单链表的插入,查找,删除等操作编写成系统。可以输入进行相关操作,代码如下:#include stdio.h>#define SIZE sizeof(LINKLIST)#define LINE_ITEM_COUNT (5) //每行显示的元素个数 #define PRINT_ITEM "%d "#define SCAN转载 2015-05-08 11:07:41 · 435 阅读 · 0 评论 -
栈和队列相互实现
以STL中Queue和Stack为例: 1.Queue和Stack的特点Queue支持的操作: queue void push(int elem) //向队列中添加元素 void pop() //从队列中转载 2015-05-04 22:58:03 · 415 阅读 · 0 评论 -
链表逆序两种
结点定义:[cpp] view plaincopystruct Node { int data; Node *next; }; 方法一:设置两个临时指针pre和ne分别标记当前指针的前驱和后继,将当前结点的next指针指向前驱,然后把前驱指针和当前指针往转载 2015-05-11 21:11:48 · 424 阅读 · 0 评论 -
字符串面试题(一)字符串逆序
几点说明1. 所有题目全部来自网络,书籍,或者我自己的面试经历,本人只是负责搜集整理。在此对原作者表示感谢!2. 我已经尽力确保文字及程序的正确性,但我毕竟是凡人,如果您发现了文章中的错误,或者有更好的解法,请一定留言相告,以免误导大家!3. 所有代码都采用C/C++编写很早就准备写一个字符串系列的面试题,本来已经写好了,大概有十几道题,但是写完才发现,文章好长,连我自己都没有耐心读下去了,索性就转载 2015-05-11 19:00:03 · 511 阅读 · 0 评论 -
单循环链表各种操作的C语言实现
下面是单循环链表的各种C语言实现:单循环链表的最后一个节点的Next域指向链表的头结点。/* 功能:构建一个空的带头节点的单链表*/Status InitList_CL (struct LNode **L){ (*L) = (struct LNode *)malloc(sizeof(struct LNode)); //产生头节点 if(!*L)转载 2015-05-08 11:11:59 · 1312 阅读 · 0 评论