★ Data Structure
烟敛寒林o
谋事在人,成事在天。
展开
-
哈希表查找——等概率情况下查找成功和查找不成功的平均查找长度的计算
最近复习数据结构中的哈希表,发现在计算等概率情况下查找不成功的平均查找长度时不太理解,不知道到底是怎么计算出来的。看了几篇博客后终于知道如何计算了,总结如下。例题:将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组,散列函数为: H(key) = (keyx3) MOD 7,处理冲突采用线性探测再散列法,要求装填(载)因子为0.7。(1)请画出所构造的散列表。(2)分别计算等概率情况下查找成功和查找不成功的平均查找长度。.转载 2020-11-28 21:49:49 · 17427 阅读 · 11 评论 -
二叉树的前中后序、层序遍历代码(递归与非递归)
#include <bits/stdc++.h>using namespace std;typedef struct BTNode { //链式存储结构 char data; struct BTNode *lchild; struct BTNode *rchild;};void preorder(BTNode *p) { //递归前序遍历 if(*p!=NULL) { visit(p); if(p->lchi.原创 2020-05-29 21:47:44 · 622 阅读 · 0 评论 -
前中后序线索二叉树的构造与遍历代码
一、中序线索二叉树的构造#include <iostream>using namespace std;//线索二叉树的构造函数typedef struct TBTNode { char data; int ltag,rtag; struct TBTNode *lchlid; struct TNTNode *rchild;};//通过中序遍历对二叉树线索化的递归算法void InThread (TBTNode *p,TBTNode *&.原创 2020-05-29 21:35:17 · 849 阅读 · 0 评论 -
数据结构 | 数组、矩阵和广义表
一、数组一维数组、二维数组(二维数组的行优先和列优先存储)二、矩阵特殊矩阵:对称矩阵、上(下)三角矩阵、三对角矩阵 稀疏矩阵:矩阵中绝大多数元素都为零的矩阵。 常用的稀疏矩阵顺序存储方法:三元组表示法和伪地址表示法。 稀疏矩阵链式存储方法中常的用两种表示法:邻接表表示法和十字链表表示法。三、广义表广义表:表元素可以是原子或者广义表的一种线性表的扩展结构。 广义表的长度:为表中最上层元素的个数。 广义表的深度:为表中括号的最大层数。 表头(Head)和表尾(Tail):当广义表非原创 2020-05-13 10:50:34 · 442 阅读 · 1 评论 -
简单排序算法(直接插入、简单选择、冒泡)
简单排序算法1. 直接插入排序://直接插入排序: //从左往右扫描出一个无序序列元素作为待插入关键字,扫描到比它大的已插入关键字就往后移动(循环),直到找到第一个比它小的关键字,就可以把待插入关键字插入//两层循环:1.从无序序列中一个个挑选出待插入关键字 2.扫描当前有序序列,需要移动元素则移动void insertSort(in...原创 2020-04-22 11:22:34 · 774 阅读 · 0 评论 -
用栈实现前中后缀表达式转换及求值
前言1.判断优先级函数2.运算函数3.取运算数、操作数进行运算一、表达式转换1.中缀表达式转后缀表达式2.中缀表达式转前缀表达式二、表达式求值1.中缀表达式求值2.后缀表达式求值3.前缀表达式求值前言1.判断优先级函数int getPriority(char op){ if(op=='+'||op=='-') ret...原创 2020-03-22 21:25:28 · 1163 阅读 · 1 评论 -
二叉树遍历的递归与非递归算法
二叉树的递归遍历(深度优先遍历)先来张图,看看各结点遍历时的情况:二叉树深度优先遍历总结(分别为第一次,第二次,第三次进入某个结点):先序遍历:先访问根结点,然后先序遍历左子树,最后先序遍历右子树;根->左->右 中序遍历:先中序遍历左子树,然后访问根结点,最后中序遍历右子树;左->根->右 后序遍历:先后序遍历左子树,然后后序遍历右子树,最后访问根结点...原创 2020-03-22 21:06:04 · 1139 阅读 · 0 评论 -
(数据结构习题)设任意n个整数存放于数组A[1..n]中,试编写算法,将所有正数排在所有负数前面(要求算法时间复杂度为O(n))
设任意n个整数存放于数组A[1..n]中,试编写算法,将所有正数排在所有负数前面(要求算法时间复杂度为O(n))#include<stdio.h>void Arrange(int A[],int n)// n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面{ int i=0,j=n-1,x; while(i<j) { ...原创 2018-10-22 19:38:08 · 14534 阅读 · 5 评论 -
线性表简单实现图书信息管理系统(C语言版)
实现图书信息管理系统的一些基本功能,首先根据图书表的特点将其抽象成一个线性表,每本图书作为线性表中的一个元素,根据顺序表存储结构来表示该线性表,在此基础上设计完成相关的功能算法。#include<stdio.h>#include<malloc.h>#include<stdlib.h>#include<string.h>#...原创 2018-10-16 20:00:23 · 15275 阅读 · 9 评论 -
(数据结构习题)假定单链表的表头指针用HL表示,类型为linklist将一个单链表中的所有结点按相反次序链接。
假定单链表的表头指针用HL表示,类型为linklist将一个单链表中的所有结点按相反次序链接。Status Contrary(HL){ p = HL; // p指向未被逆序的第一个结点,初始指向原表头结点 HL = i; // HL指向逆序后的表头结点,初始值为空 while( p!=i ) { q=p; // q指向将被逆序链接的...原创 2018-09-21 09:13:33 · 3127 阅读 · 0 评论 -
(数据结构习题)从类型为linklist的链表L中删除其值等于x的所有元。
从类型为linklist的链表L中删除其值等于x的所有元。Status ListDelete(L,x){ // 向线性表L中删除其值等于x的所有元素 i=1; while( i<=L.length ) if( L.data[i]==x ) { for( j=i+1; j<=L.length; j++...原创 2018-09-21 09:12:31 · 874 阅读 · 0 评论 -
数据结构简答题期末复习
1、数据结构定义数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成。 2、其逻辑结构的四种关系并画出它们的关系图集合结构 2.线性结构 3.树形结构 4.图形结构https://blog.csdn.net/dyw_666666/article/details/82343558 3、数据结构的特性数组:优点是插入快,如果知道下标,可...原创 2018-12-26 20:16:15 · 14809 阅读 · 0 评论 -
(数据结构习题)向类型为Sqlist的顺序表L的第i个元素之后插入一个新元素x。
向类型有Sqlist的顺序表L的第i个元素(0<=i<=L.len)之后插入一个新元素x。Status ListInsert(SqList *L,int i,ElemType x){ // 向线性表L中第i个元素之后插入值为x的新元素 if( L->length == 0 ) // 顺序表为空 return ERROR; if( i...原创 2018-09-21 09:09:18 · 10450 阅读 · 0 评论 -
(数据结构习题)写一个递归算法实现字符串逆序存储,要求不另设串存储空间。
写一个递归算法实现字符串逆序存储,要求不另设串存储空间。#include<stdio.h>#include<string.h>void rev1(char *c);void rev2(char *c);void rev3(char *c);int main(void){ char str[]="abcde"; printf("原字符串...转载 2018-10-22 20:24:01 · 5847 阅读 · 2 评论 -
数据结构 —— 利用栈实现回文判断
一、先理解什么是栈、什么是回文栈的性质:先进后出或后进先出的特性,栈的实现也很简单,只需要一个一维数组和一个指向栈顶的变量top就可以了。我们通过变量top来对栈进行插入和删除操作。回文:回文字符串就是从前向后看个从后向前看都是一样的字符串。例如,dad,abcba,sees都是回文串,但是”hello“就不是的。检查回文字符串的一个方法就是用栈。 二、算法实现的两个代码#in...原创 2018-10-21 22:10:00 · 22937 阅读 · 2 评论 -
(数据结构实验)栈的应用-算术表达式求值
实验目的:1.掌握栈的定义及实现;2.掌握利用栈求解算术表达式的方法。 实验内容:通过修改完善教材中的算法3.22,利用栈来实现算术表达式求值的算法。对算法3.22中调用的几个函数要给出其实现过程:(1) 函数In(c):判断c是否为运算符;(2) 函数Precede(t1,t2):判断运算符t1和t2的优先级;(3) 函数Operate(a,theta,b):...原创 2018-11-24 16:50:00 · 12302 阅读 · 5 评论 -
无向图的邻接表
如何根据无向图画出邻接表呢?比如:第一排的v1,与v2和v4相连,因此两个黄色方框内的数字分别代表v2和v4的下标;第二排的v2,与v1、v3和v5相连,因此三个绿色方框内的数字分别代表v1和v3和v5的下标;以此类推。同时反过来推测:第一排的三个红边方框,“1” “2” “3”:代表v0与v1、v2、v3相连;第二排的两个红边方框,“0” “2”:代表v1与...原创 2018-12-24 13:44:36 · 39125 阅读 · 7 评论 -
有向图的邻接矩阵、邻接表和逆邻接表
1、如何根据有向图画出邻接矩阵?如图:v1指向v2和v3,在矩阵中v1指向v2、v3的表示标1。注意:v1指向v2在矩阵中是用竖列的v1对应横行的v2 2、如何根据有向图画出邻接表呢?注意:画有向图的邻接表时,要看出边,即自身指向别人的边。如图所示:第一排的v1,指向v2和v3,因此两个黄色方框内的数字分别代表v2和v3的下标,即1和2;第二排的v...原创 2018-12-24 14:18:05 · 67908 阅读 · 6 评论 -
图解二叉树的4种遍历方法
一、先序遍历若树为空,则空操作返回。否则,先访问根节点,然后前序遍历左子树,再前序遍历右子树。(W)型 (中 左 右) 二、中序遍历若树为空,则空操作返回。否则,从根节点开始(注意并不是先访问根节点),中序遍历根节点的左子树,然后是访问根节点,最后中序遍历根节点的右子树。(M)型,(左 中 右) 三、后序遍历若树为空,则空操作返回。否则,从左到右先叶子后...原创 2018-12-24 14:34:54 · 1124 阅读 · 0 评论 -
大话数据结构 —— 3.3 线性表的抽象数据类型
介绍抽象数据类型之前,我们应该了解数据类型的定义是什么?数据类型:是指一组性质相同的值的集合及定义在此集合上的一些操作的总称。例如很多编程语言的整型,浮点型,字符型这些指的就是数据类型。例如在C语言中,按照取值的不同,数据类型可以分为两类:原子类型:不可以再分解的基本类型,例如整型、浮点型、字符型等。 结构类型:由若干个类型组合而成,是可以再分解的,例如整型数组是由若干整型数据组成...原创 2018-09-16 23:47:45 · 572 阅读 · 0 评论 -
大话数据结构 —— 2.9 算法时间复杂度(合集)
2.9.1 算法时间复杂度定义 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作:T(n) = O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。...原创 2018-09-24 00:55:25 · 440 阅读 · 0 评论 -
大话数据结构 —— 2.12 算法的空间复杂度
算法的空间复杂度通过计算算法所需的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n)),其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。通常,我们都是用“时间复杂度”来指运行时间的需求,是用“空间复杂度”指空间需求。当直接要让我们求“复杂度”时,通常指的是时间复杂度。 ...原创 2018-09-11 08:18:43 · 221 阅读 · 0 评论 -
大话数据结构 —— 3.5 顺序存储结构的插入与删除
目录3.5.1 获得元素操作3.5.2 插入操作3.5.3 删除操作3.5.4 线性表顺序存储结构的优缺点3.5.1 获得元素操作实现GetElem的具体操作,即将线性表L中的第i个位置元素值返回。就程序而言非常简单了,我们只需要把数组第i-1下标的值返回即可。我们来学习下具体的代码:getElem.c#define OK 1#define ERROR 0#d...原创 2018-09-17 13:43:42 · 731 阅读 · 0 评论 -
大话数据结构 —— 2.7 算法效率的度量方法
先来看两种求和的算法:第一种算法:int i,sum=0,n=100; //执行1次for( i=1; i<=n; i++ ) //执行了n+1次{ sum=sum+i; //执行n次}第二种算法:int sum=0,n=100; //执行1次sum = (1+n)*n/2; //执行1次第一种算法执行了1+(n+1)+n=2n+2次。 ...原创 2018-09-10 08:35:31 · 213 阅读 · 0 评论 -
抽象数据类型复数的求和求差实现(c语言)
#include<stdio.h>typedef struct{ float Realpart; //实部 float Imagepart; //虚部}Complex;Complex Create(float x,float y){ //构造一个复数 Complex C; C.Realpart=x; C.Imagepart=...原创 2018-09-12 20:33:18 · 3243 阅读 · 0 评论 -
大话数据结构 —— 3.4 线性表的顺序存储结构
目录3.4.1 顺序存储定义3.4.2 顺序存储方式3.4.3 数据长度与线性表长度区别3.4.4 地址计算方法3.4.1 顺序存储定义线性表有两种物理存储结构:顺序存储结构和链式存储结构。线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。线性表(a1,a2....,an)的顺序存储如下:大家有没发现是不是跟数组一样的?物理上的存...原创 2018-09-16 23:55:55 · 236 阅读 · 0 评论 -
大话数据结构 —— 3.2 线性表的定义
线性表(List):由零个或多个数据元素组成的有限序列。这里需要强调几个关键的地方:首先它是一个序列,也就是说元素之间是有个先来后到的。 若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。 另外,线性表强调是有限的,事实上无论计算机发展到多强大,它所处理的元素都是有限的。如果用数学语言来进行定义,可如下:若将线性表记为(a1,.,ai-1,a...原创 2018-09-16 23:39:46 · 194 阅读 · 0 评论 -
大话数据结构 —— 1.4 基本概念和术语
数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也被称为记录。数据项:一个数据元素可以由若干个数据项组成。数据 &amp;gt; 数据元素 &amp;gt; 数据项数据对象:是性质相同的数据元素的集合,是数据的子集。数据结构:是相互之间存在一种或多种特定关系的数据元素...原创 2018-09-03 23:12:32 · 175 阅读 · 0 评论 -
大话数据结构 —— 1.5.2 物理结构
根据物理结构的定义,我们实际上研究的就是如何把数据元素存储到计算机的存储器中。 存储器主要是针对内存而言的,像硬盘、软盘、光盘等外部存储器的数据组织通常用文件结构来描述。 数据元素的存储结构形式有两种:顺序存储和链式存储。 顺序存储结构 顺序存储结构:把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。 例如我们编程语言的数组结构就是这样的。 链式存储结...原创 2018-09-03 08:45:41 · 174 阅读 · 0 评论 -
大话数据结构 —— 1.5.1 逻辑结构
1.集合结构 2.线性结构 3.树形结构 4.图形结构原创 2018-09-03 08:35:55 · 458 阅读 · 0 评论 -
大话数据结构 —— 3.6 线性表的链式存储结构
3.6.1 顺序存储结构不足的解决办法C同学:反正要在相邻元素间留多少空间都是有可能不够的,那不如干脆不要考虑相邻位置这个问题了。哪里有空位就放在哪里,此时指针刚好可以派上用场。每个元素多用一个位置来存放指向下一个元素的位置的指针。这样子从第一个元素可以找到第二个元素,第二个元素可以找到第三个元素,依此类推,所有的元素我们就都可以通过遍历而找到了。 3.6.2 线性表...原创 2018-09-17 13:57:55 · 189 阅读 · 0 评论 -
大话数据结构 —— 2.8 函数的渐近增长
我们先来做一个测试,判断以下两个算法A和B哪个更好?假设两个算法的输入规模都是n,算法A要做2n+3次操作,你可以这么理解: 先执行n次的循环, 执行完成后再有一个n次的循环,最后有3次运算。算法B要做3n+1次操作,理解上,你觉得它们哪一个更快些呢?在给大家解答问题之前,先给大家做个图表参考: 当n=1时,算法A1效率不如算法B1, 当n=2时,两者效率相...原创 2018-09-10 15:25:54 · 432 阅读 · 0 评论 -
大话数据结构 —— 2.11 最坏情况与平均情况
最坏情况与平均情况 算法的分析也是类似,我们查找一个有n个随机数字数组中的某个数字, 最好的情况是第一个数字就是,那么算法的时间复杂度为0(1),但也有可能这个数字就在最后一个位置,那么时间复杂度为0(n)。 平均运行时间是期望的运行时间。 最坏运行时间是一种保证。在应用中,这是一种最重要的需求,通常除非特别指定,我们提到的运行时间都是最坏情况...原创 2018-09-10 16:20:31 · 307 阅读 · 0 评论 -
大话数据结构 —— 2.10 常见的时间复杂度
例子 时间复杂度 非正式术语 5201314 O(1) 常数阶 3n+4 O(n) 线性阶 3n^2+4n+5 O(n^2) 平方阶 ...原创 2018-09-10 16:18:39 · 157 阅读 · 0 评论 -
大话数据结构 —— 2.9.6 平方阶
n等于100,也就是说外层循环每执行一次, 内层循环就执行100次那总共程序想要从这两个循环出来,需要执行100*100次, 也就是n的平方。所以这段代码的时间复杂度为0(n^2)。那如果有三个这样的嵌套循环呢?没错,那就是n^3。所以我们很容易总结得出,循环的时间复杂度等于循环体的复杂度乘以该循环运行的次数。 例一:下面的例子是一个循环嵌套,它的内循环刚才2.9.4中分析过,内...原创 2018-09-10 15:57:05 · 901 阅读 · 0 评论 -
大话数据结构 —— 2.9.5 对数阶
int i=1,n=100;while( i<n ){ i=i*2;}由于每次i*2之后,就举例n更近一步,假设有x个2相乘后大于或等于n, 则会退出循环。于是由 2^x=n 得到 x=log(2)n, 所以这个循环的时间复杂度为O(logn)。 ...原创 2018-09-10 15:46:34 · 554 阅读 · 0 评论 -
大话数据结构 —— 2.9.4 线性阶
一般含有非嵌套循环涉及线性阶,线性阶就是随着问题规模n的扩大,对应计算次数呈直线增长。int i,n=100,sum=0;for( i=0; i < n; i++){ sum=sum+i;}上面这段代码,它的循环的时间复杂度为O(n),因为循环体中的代码需要执行n次。其实,线性阶就是一个简单的for循环,条件在i<n,因而时间复杂度为O(n)。...原创 2018-09-10 15:43:03 · 717 阅读 · 0 评论 -
大话数据结构 —— 2.9.3 常数阶
int sum=0,n=100; /* 执行1次 */sum = (1+n)*n/2; /* 执行第1次 */sum = (1+n)*n/2; /* 执行第2次 */sum = (1+n)*n/2; /* 执行第3次 */sum = (1+n)*n/2; /* 执行第4次 */sum = (1+n)*n/2; /* 执行第5次 */sum = (1...原创 2018-09-10 15:40:27 · 516 阅读 · 0 评论 -
大话数据结构 —— 2.9.2 推导大O阶方法
那么如何分析一个算法的时间复杂度呢?即如何推导大O阶呢?用常数1取代运行时间中的所有加法常数。 在修改后的运行次数函数中,只保留最高阶项。 如果最高阶项存在且不是1,则去除与这个项相乘的常数。得到的最后结果就是大O阶。...原创 2018-09-10 15:32:15 · 334 阅读 · 0 评论 -
大话数据结构 —— 2.9.1 算法时间复杂度的定义
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间量度,记作: T(n)= O(f(n))。它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。 这样用大写0()来体现算法时间复...原创 2018-09-10 15:30:50 · 165 阅读 · 0 评论