数据结构
本专栏主要是自己在学习数据结构中遇到的问题,心得和学习笔记,有不足之处,还请海涵。
龙跃十二
养成阅读的习惯等于为你自己筑起一个避难所,几乎可以避开生命中所有的灾难。
展开
-
《数据结构与算法》—— O(3N)=O(N) ?
数据结构与算法的重要概念阐述原创 2020-03-01 21:03:50 · 3023 阅读 · 0 评论 -
我以为我学懂了数据结构,直到看了这个导图才发现,我错了
数据结构与算法思维导图原创 2020-02-27 23:10:33 · 109459 阅读 · 68 评论 -
时间复杂度和空房间复杂度
一、时间复杂度:(注意:不是指程序运行时间)1定义:一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。 2、 计算方法:在计算时间复杂度的时候,先找出原创 2017-12-09 19:19:50 · 1976 阅读 · 0 评论 -
顺序表
顺序表的增,删,查,改,排序原创 2017-12-13 15:54:14 · 768 阅读 · 0 评论 -
单链表(创建,增,删,查,改,打印,销毁链表)
一、单链表(增,删,查,改,打印,销毁链表) 注意链表头的动态,需要改变头指针的先把指针保存起来 1,链表的创建。 2,链表的打印。(循环打印,遇到null则停止) 3,单链表的插入(包括头插,尾插,随机插)。 提示:①空链表,则直接插入;②只有一个节点和尾插,注意插入后 next=NULL;③其他情况就是正常插入。 3,单链表的删除(包括头删,尾删,原创 2017-12-14 20:35:29 · 1412 阅读 · 1 评论 -
链表的从尾到头打印(四种方法)
一、单链表从尾到头打印的四种方法。 1、正常从尾到头打印。 用一个尾指针指到最后,尾指针每次前移移位,遇到尾指针则打印。void EndToFirstPrintNode(SListNode*ps) //正常从尾到头打印{ SListNode *cur=ps; SListNode *tail=NULL; while (ps != tail) { c原创 2017-12-17 17:16:14 · 7905 阅读 · 1 评论 -
无头单链表
一、无头单链表的非尾节点删除(不能遍历链表) 我们无法删除该节点,我们可以下一个节点的值给该节点,再删除下一个节点 代码如下:void NoHeadSeqListDelete(SListNode *pos) //删除一个无头链表的非尾节点(不能遍历链表){ SListNode*tmp; tmp=pos->_next; //保存pos->_next的值,方便一会销毁原创 2017-12-20 22:58:55 · 832 阅读 · 0 评论 -
链表面试题
一、题目 1、从尾到头打印单链表 (有四种方法) 2、删除一个无头单链表的非尾节点(不能遍历链表) 3、在无头单链表的一个节点前插入一个节点(不能遍历链表) 4、单链表实现约瑟夫环(JosephCircle) 5、逆置/反转单链表 6、单链表排序(冒泡排序&快速排序) 7、合并两个有序链表,合并后依然有序 8、查找单链表的中间节点,要求只能遍历一次链表 9、...原创 2018-01-04 22:57:30 · 795 阅读 · 0 评论 -
链表面试题
整体代码: 1、SListNode.h#ifndef __SLISTNODE_H__#define __SLISTNODE_H__#include <stdio.h>#include <stdlib.h>#include <assert.h>typedef int DataType;typedef struct SListNode ...原创 2018-01-04 23:10:26 · 345 阅读 · 0 评论 -
链表相交和带环问题
一、题目 1、判断单链表是否带环?若带环,求环的长度?求环的入口点? ①链表是否带环问题。( 定义两个指针同时指向头节点,一个快指针,一个慢指针,两个指针同时遍历链表,快指针一次走两步,慢指针一次走一步,如果链表带环,两个指针一定会在环内相遇。例如两个人在操场同时跑步,跑得快的人一定会追上跑得慢的人。) ②在第一问中已经可以求得两指针相遇点,在定义一个指针,从相遇点出发开始遍历环,在此走到相...原创 2018-01-08 21:34:43 · 987 阅读 · 0 评论 -
栈和队列基本知识
一、栈和队列基本知识 1、栈和队列的创建。 2、栈和队列的初始化。 3、栈的增容。 4、入栈,出栈,入队,出队。 5、取得栈顶,队头和队尾元素。 6、求栈和队列的大小,判断栈和队列是否为空。 二、代码:栈的基本操作:void StackInit(Stack *s) //栈的初始化{ assert(s); s->data=NULL; s->end=0;原创 2018-01-13 13:59:04 · 1469 阅读 · 0 评论 -
链式栈的基本操作
一、链式栈的基本操作 1、栈的创建。 2、栈的初始化。 3、入栈,出栈。 5、取得栈顶元素。 6、求栈的大小,判断栈是否为空。 二、代码: //链式栈的基本操作typedef struct LinkStack //创建链式栈{ DataType data; struct LinkStack *next;}LinkStack;void Link原创 2018-01-15 20:53:56 · 4198 阅读 · 1 评论 -
迷宫问题
一、迷宫问题 1、打印迷宫。(打印二维数组) 2、简单迷宫,找出其中的通路(①迭代法。②递归法)。 3、多条通路迷宫,找出所有的通路。 4、多条通路和带环通路迷宫,求最短通路。 二、函数代码: 1、打印迷宫地图:void MazePrint() //打印迷宫 { size_t i =0,j=0; for (i = 0; i<N; i++)原创 2018-01-20 23:18:35 · 1057 阅读 · 0 评论 -
二叉树基本操作(上)
一、二叉树基本操作 1、二叉树的创建(二叉链) a[] = {1,2,3,’#’,’#’,4,5,’#’,’#’,6,’#’,’#’,7,8,’#’,9,’#’,’#’,’#’};(‘#’代表NULL)。 2、二叉树的遍历 (1)迭代法遍历(①前序遍历②中序遍历③后序遍历) (2)递归法遍历(①前序遍历②中序遍历③后序遍历) (3)层序遍历。 前序遍历也叫先根遍历:访问顺序:根–原创 2018-01-21 20:38:03 · 574 阅读 · 0 评论 -
二叉树基本操作(上)
一、二叉树简单操作 1、二叉树的创建(二叉链) a[] = {1,2,3,’#’,’#’,4,5,’#’,’#’,6,’#’,’#’,7,8,’#’,9,’#’,’#’,’#’};(‘#’代表NULL)。 2、二叉树的遍历 (1)迭代法遍历(①前序遍历②中序遍历③后序遍历) (2)递归法遍历(①前序遍历②中序遍历③后序遍历) (3)层序遍历。 二、完整代码 1、Bina原创 2018-01-21 20:46:07 · 626 阅读 · 0 评论 -
二叉树简单操作(下)
一、二叉树基本操作 1. 求二叉树的深度。(树的深度:树中所有节点的层次的最大值称为该树的深度) 2. 求二叉树叶子结点的个数。(叶子节点:度为0的结点称为叶结点,叶节点也称为终端节点) 3. 求二叉树结点的个数。(节点:结点包括一个数据元素及若干指向其他子树的分支(指针(索引))) 4. 求二叉树第K层结点的个数。 5. 判断一个节点是否在一棵二叉树中。 6. 获取一个节原创 2018-01-22 14:56:52 · 422 阅读 · 0 评论 -
单双链表练习题
本文是关于链表的一些操作(包括单链表和双向循环链表) 1、单链表,双链表的创建。 2、单链表和双链表的打印。 3、单链表的插入,删除。 4、双链表的插入和删除。 5、单链表的逆置。 6、单链表节点的个数。 7、单链表,双链表的查找。 函数代码://链表相关问题typedef int DataType;typedef struct LinkNode //单链表结构{原创 2018-01-27 17:52:26 · 817 阅读 · 0 评论 -
【数据结构】顺序表和单链表所有知识点(附带面试题)
一、顺序表 顺序表定义 :顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。原创 2018-02-06 13:41:25 · 3141 阅读 · 2 评论 -
回溯法解决迷宫问题
今天在又一次看到了回溯法解决关于迷宫的问题,于是在这里分享给大家。回溯法:对一个包括有很多个结点,每个结点有若干个搜索分支的问题,把原问题分解为若干个子问题求解的算法;当搜索到某个结点发现无法再继续搜索下去时,就让搜索过程回溯(回退)到该节点的前一个结点,继续搜索该节点外的其他尚未搜索的分支;如果发现该结点无法再搜索下去,就让搜索过程回溯到这个结点的前一结点继续这样的搜索过程;这样的搜索过程一...原创 2018-02-08 12:03:48 · 2149 阅读 · 0 评论 -
【数据结构】——堆及其应用
一、堆 先说说堆概念:如果有一个关键码的集合K = {k0,k1, k2,…,kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足:Ki <= K2*i+1 且 Ki<= K2*i+2 (Ki >=K2*i+1 且 Ki >= K2*i+2) i =0,1,2…,则称为小堆(或大堆)。小堆(大堆)中:任一结点的关键码均小于(大于)等于它的左...原创 2018-02-25 20:22:15 · 657 阅读 · 0 评论 -
【数据结构】——搜索二叉树的插入,查找和删除(递归&非递归)
一、搜索二叉树的插入,查找,删除 简单说说搜索二叉树概念: 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树 若它的左子树不为空,则左子树上所有节点的值都小于根节点的值 若它的右子树不为空,则右子树上所有节点的值都大于根节点的值 它的左右子树也分别为二叉搜索树 例如:int a [] = {5,3,4,1,7,8,2,6,0,9}; 二叉树结构...原创 2018-02-26 21:28:22 · 1078 阅读 · 0 评论 -
二叉搜索树应用-判断一个单词是否拼写正确,实现简单字典
本文在windows下vs2008上测试通过,本文阐述了两个问题1. 验证一个单词是否拼写正确2. 请模拟实现一个简单字典这两个问题都是典型的K(key)V(value)问题,我们用KV算法解决。原创 2018-02-27 19:44:14 · 1353 阅读 · 0 评论 -
哈希表(散列表)详解
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。顺序搜索以及二叉树搜索树中,元素存储位置和元素各关键码之间没有对应的关系,因此在查找一个元素时,必须要经过关键码的多次比较。搜索的效率取决于搜索过程中元素的比较次数...原创 2018-02-28 21:13:24 · 5158 阅读 · 2 评论 -
哈希表的开散列法(拉链法)
开散列法又叫链地址法(开链法)。 开散列法:首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶,各个桶中的元素通过一个单链表链接起来,各链表的头结点存储在哈希表中。设元素的关键码为37, 25, 14, 36, 49, 68, 57, 11, 散列表为HT[12],表的大小为12,散列函数为Hash(x) = x % 11 Hash(37)=...原创 2018-03-01 21:56:28 · 7524 阅读 · 2 评论 -
哈希表扩展—位图
1.什么是位图?位图就是bitmap的缩写。所谓bitmap,就是用每一位来存放某种状态,适用于大规模数据,但数据状态又不是很多的情况。通常是用来判断某个数据存不存在的。在STL中有一个bitset容器,其实就是位图。所以我们可以了解到,位图就是一个只用每一位来保存数的状态的结构。2.位图的用处?位图主要用于海量数据处理,索引,数据压缩等方面有广泛应用3.位图的结构...原创 2018-03-02 21:53:28 · 781 阅读 · 0 评论 -
哈希表扩展—布隆过滤器(Bloom Filter)
1.概念: 如果想判断一个元素是不是在一个集合里,一般想到的是将所有元素保存起来,然后通过比较确定。链表,树等等数据结构都是这种思路. 但是随着集合中元素的增加,我们需要的存储空间越来越大,检索速度也越来越慢。不过世界上还有一种叫作散列表(又叫哈希表,Hash table)的数据结构。它可以通过一个Hash函数将一个元素映射成一个位阵列(Bit Array)中的一个点。这样一来,我们只要看看这个...原创 2018-03-03 17:20:17 · 937 阅读 · 0 评论 -
排序算法(七大经典排序算法)
排序算法是一种在日常生活中应用很广泛的算法,所以我们应该很好的掌握他。然而最熟悉的往往是最容易忽略的。“工欲善其事,必先利其器”,下面对常见算法逐个介绍。主要介绍 插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序。原创 2018-03-05 15:39:23 · 5595 阅读 · 3 评论 -
海量数据处理
给一个超过100G大小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?思路:首先100G大小的文件,计算机内存无法存储,所以我们解决问题首先不能考虑把文件放在内存中在去遍历统计次数。但是我们可以数据结构中的哈希表来处理。 1)切割文件:将100G的大文件文件分割为1000份(分多少份取决你处理文件的大小)。2)计算ip的位置:ip是字符串,我们通过字符串...原创 2018-03-08 18:28:09 · 625 阅读 · 0 评论