![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 53
允谦呀
考研路程,任重而道远
展开
-
atoi()函数详解
atoi()函数详解atoi(s)函数用于把一个字符串转换成一个整型数据,该函数定义在stdlib.h中例:假如你输入的是123456;那么它先被读入到字符串s中,用atoi()函数就可以把它转化成一个整数,如果转化成功,则返回转化后的整数,此时b = 123456,否则返回0。 如果你输入的不是数字字符串,比如abcde,那么就会转化失败, 返回值为0,也就是说,你输入的字符串必须是整数并且在整型的范围内 (-1018~1018)#include <bits/stdc++.h>//c++原创 2021-04-10 10:47:18 · 20005 阅读 · 0 评论 -
Hash表(哈希表)算法详解
Hash表(哈希表)算法详解Hash表的根据存储结构,可以有两种实现方法,一种是拉链式,一种是开放寻址法拉链式,是将数据映射到一维数组中,在对应的位置下引出一个一个单链表,通过查找链表上的数据,进行查找,时间复杂度在0(1)左右。开放寻址法是在一维数组中找到映射的值,如果不相等就,与下一个比较,如果下一个为空,则没有这个数据下面看一下拉链式代码:#include <iostream>#include <cstring>using namespace std;const原创 2021-07-23 21:10:49 · 904 阅读 · 0 评论 -
线性筛选求素数(质数)
线性筛选求素数(质数)原理:首先要明白的是,如果一个数是素数,那么他的倍数也就不是素数(线性筛选法主要就是利用这个思想,快速的过滤掉一大部分数,以达到快速筛选的目的,减小时间复杂度),例如:3是一个素数,如果要求10以内的素数,那么在查到3是素数的同时,就会把6和9给排除掉。#include <bits/stdc++.h>//万能头文件using namespace std;const long MAX = 1000000;long prime[MAX]={0},k=0;//prim原创 2021-03-28 11:31:38 · 563 阅读 · 0 评论 -
求指定范围内的所有素数(最基础最好理解的方式)
求指定范围内的所有素数(最基础/最好理解的方式)原理:首先要明白什么是素数(如果一个数除了1和它本身没有别的因子,那么这个数就是素数)#include <bits/stdc++.h>//万能头文件 using namespace std;const int N = 100000;//定义一个常量 int prime[N];//定义一个存素数的数组 int main(){ int n, k = 0; cin >> n;//输入一个数,求n以下的所有素数(包含n)原创 2021-03-28 13:08:22 · 3421 阅读 · 0 评论 -
数据结构第八章——排序,考研必备
数据结构第八章——排序什么是排序?排序:将一组杂乱无章的数据按一定规律顺序依次排列起来存储结构——记录序列以顺序表存储#define MAXSIZE 20//设记录不超过20个typedef int KeyType;//设关键字为整型量(int)typedef struct{ KeyType key;//关键字 InfoType otherinfo;//其他数据项}RedType;typedef struct{ RedType r[MAXSIZE + 1];//存储顺序表的向量 in原创 2021-11-21 17:29:55 · 614 阅读 · 0 评论 -
数据结构第七章——查找
数据结构第七章——查找查找的概念查找表是同一类型的数据元素(或记录)构成的集合。由于“集合”中的数据元素之间存在着松散的关系。顺序查找(时间复杂度O(n)空间复杂度O(1))typedef struct{//顺序表结构类型定义 ElemType *R;//表基地址 int length;//表长}SSTable;//Sequential Search TableSSTable ST;//定义顺序表STint Search_Seq(SSTable ST,KeyType key){ //若成原创 2021-11-21 14:14:27 · 1041 阅读 · 0 评论 -
数据结构第六章——图
数据结构第六章——图图的定义和术语G = (V, E)V:顶点(数据元素的)有穷非空集合;E:边的有穷集合。**无向图:**每条边都是无方向的。**有向图:**每条边都是有方向的。**完全图:**任意两个顶点都有一条边两连**无向完全图:**n个顶点 n(n-1)/2条边**有向完全图:**n个顶点 n(n-1)条边**稀疏图:**有很少边或弧地的图**稠密图:**有较多的边或弧的图**网:**边/弧带权的图**邻接:**有边/弧相连的两个顶点之间的关系关联(依附):边/弧与顶原创 2021-11-20 19:19:34 · 1190 阅读 · 0 评论 -
数据结构第五章——树和二叉树
数据结构第五章——树和二叉树树的定义树(Tree)是n(n>=0)个结点的有限集若n = 0,称为空树若n>0,则它满足以下两个条件:有且仅有一个特定的称为根其余节点可分为m(m>0)个互不相交的有限集T1,T2,T3,……,Tm,其中每一个集合本身又是一棵树,并称为根的子树(SubTree)根结点:非空树中无前驱结点的结点结点的度:结点有用的子树数树的度:树内各结点度的最大值树的深度:树的结点的最大层次有序树树中结点的各子树从左只有有次序(最左表单为第一个还在原创 2021-11-17 19:27:48 · 838 阅读 · 2 评论 -
数据结构第4章—— 串、数组、广义表
第4章 串、数组、广义表1、串(String)——零个或多个任意字符组成的 有限序列2、子串:串中任意个连续字符组成的子序列(含空串)称为该串的子串3、真子串是指不包含自身的所有子串4、字符位置:字符在序列中的序号为该字符在串中的位置5、子串位置:子串第一个字符在空串中的位置6、空格串:由一个或多个空格组成的串7、串相等:当且仅当两个串的长度相等并且各个对应位置上的字符都相同时,这两个串才是相等的串的顺序存储结构#define MAXSIZE 255typedef struct{ ch原创 2021-11-14 15:07:43 · 1035 阅读 · 0 评论 -
数据结构第三章——栈和队列
数据结构第三章——栈和队列栈和队列的定义和特点栈和队列是限定插入和删除只能在表的“端点”进行的线性表栈(后进先出)由于栈的操作具有后进先出的固有特性,使得栈成为程序设计中有用的个工具。另外,如果问题求解的过程具有“后进先出的天然特性的话”,则求解是算法中也必然需要利用栈数制转换表达式求值括号匹配的检验八皇后问题行编辑程序函数调用迷宫求解递归调用的实现队列(先进先出)由于队列的错做具有先进先出的特性,使得队列称为程序设计中解决类似排队问题的有用工具脱机打印输出:按申请的原创 2021-11-13 14:22:41 · 1450 阅读 · 0 评论 -
原地反转链表(空间复杂度为O(1))
链表原地翻转链表原地翻转的意思是指针p->next是要指向它的前一个结点因此有一个结点pre一直在p的前面由于当前p这个结点翻转后,还需要指向下一个结点继续重复“翻转”操作,因此还需要一个指针记录p后面的结点指针 用途p 当前翻转rear 指向p后面的那个结点pre 指向p前面的那个结点//设计一个算法,将链表所有结点的链接方向原地宣战,即要求利用原表的存储空间,换句话说,要求算法的空间复杂度为O(1) #include <bits/stdc++.h>using nam原创 2021-11-11 15:23:53 · 2218 阅读 · 0 评论 -
数据结构第二章——线性表的定义和特点
数据结构第二章——线性表的定义和特点线性表的定义和特点线性表是具有相同特性的数据元素的一个有限序列其中数据元素的个数n定义为表的长度当n = 0时称为空表线性表的逻辑特征:在非空的线性表,有且仅有一个开始结点a1,他没有直接前驱,儿仅有一个直接后继a2有且仅有一个终端结点an,它没有直接后继,而仅有一个直接前驱an-1其余的内部结点ai(2 <= i <= n - 1)都仅有一个直接前驱ai-1和一个直接后继ai+1线性表的顺序存储表示线性表的顺序表示又称为顺序存储原创 2021-11-08 22:23:18 · 7772 阅读 · 0 评论 -
数据结构学习——第一章了解数据结构
数据结构学习——第一章绪论1、数据(Data):是能输入计算机且能被计算机处理的各种符号的集合信息的载体是对客观事物符号化的标识能够被计算机识别、存储和加工2、数据元素和数据项数据元素(Data element):是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理也简称为元素,或称为记录、结点或顶点一个数据元素可由若干个数据项组成(Data item)数据项:构成数据元素的不可分割的最小单位数据、数据元素、数据项三者之间的关系:数据 > 数据原创 2022-07-05 08:34:55 · 261 阅读 · 0 评论 -
树的学习与应用(从基础学起)
树的学习与应用树的概念树是n(n>=0)个结点的有限集合,n = 0 时称为空树,这是一种特殊情况,在任意一棵非空树中应满足:有且仅有一个特定的称为根的节点当 n > 1 时,其余节点可分为m (m > 0)个互不相交的集合T1,T2,T3……Tm,其中每个集合本身又是一棵树,并且称为根结点的子树属性:结点的层次(深度)-----从上往下数结点的高度--------------从下往上数树的高度(深度)-------总共多少层结点的度----------------有原创 2022-06-17 14:06:33 · 242 阅读 · 1 评论 -
KMP算法详解
KMP算法详解首先回忆一下我们的朴素式模式匹配,对于朴素式模式匹配算法,他是存在“回溯”的情况的,即发现匹配失败之后,上一次匹配的下一格开始重新匹配,可以发现,这样的算法时间复杂度很高,所以我们来看一下KMP算法KMP算法相对于朴素式模式匹配算法最大的优点就是主串指针不回溯,只有模式串的指针回溯下面我们来分析一下:如果 j = k 时发现匹配失败,说明 1 ~ k - 1都匹配成功KMP算法代码int Index_KMP(string s, string T, int next[]){ int原创 2022-06-18 09:44:48 · 191 阅读 · 0 评论 -
括号匹配问题(STL)
括号匹配问题(STL)前面写过一个手写栈的实现方式,原理是一样的,现在发一个使用STL写的简洁方式#include <cstring>#include <iostream>#include <stack>using namespace std;bool pp(string str,int length){ stack<char> s; for(int i = 0; i < length; i++){ if(str[i] == '('原创 2022-07-04 16:36:24 · 273 阅读 · 0 评论 -
C++括号匹配问题(手写栈程序)
括号匹配问题(手写栈程序)利用栈的后进先出的特性,将所有的左括号( ( , [ , {)压入栈中,如果遇到右括号,则弹出栈顶元素代码实现如下:#include <bits/stdc++.h>#define MaxSize 10 using namespace std;//声明一个栈typedef struct { char data[MaxSize]; int top;}SqStack;//初始化栈void InitStack(SqStack &S){ S.原创 2022-06-27 11:25:53 · 411 阅读 · 0 评论 -
队列的学习与应用(附代码)
队列的学习与应用(附代码)队列(Queue)是只允许在一端进行插入,在另一端删除的线性表**特点:**先进先出(First In First Out)常用命名规范:InitQueue(&Q):初始化队列,猴枣一个空队列DestoryQueue(&Q):销毁队列。销毁并释放队列Q所占用的内存空间EnQueue(&Q,x):入队DeQueue(&Q,&x):出队GetHead(Q,&x):读队头元素其他常用操作:QueueEmpty(Q):判队原创 2022-07-10 09:52:07 · 289 阅读 · 0 评论 -
栈的学习与应用
栈的学习与应用栈(Stack)是只允许在一段进行插入或删除操作的线性表特点:后进先出(Last In First Out)常用的命名规范:InitList(&L):初始化栈。构造一个空栈S,分配内存空间DestoryStack(&L):销毁栈,销毁并释放栈S所占用的内存空间Push(&S,x):进栈Pop(&S,&x):出栈GetTop(&S,&x):读栈顶元素StackEmpty(S):判断一个栈S是否为空顺序栈的实现#incl原创 2022-07-09 23:23:50 · 150 阅读 · 0 评论 -
数据结构之线性表(附代码)
数据结构学习笔记数据元素、数据项:数据元素是数据的基本单位,通常作为一个整体,进行考虑和处理一个数据元素可以由若干个数据项组成,数据项是构成数据元素的不可分割的最小单位。数据结构、数据对象:数据结构是相互之间存在一种或多种特定关系的数据元素的集合数据对象是具有相同性质的数据元素的集合,是数据的一个子集;数据结构的三要素:逻辑结构:集合、线性结构(一对一的关系)、树形结构(一对多)、图结构(多对多)物理结构(存储结构)–如何用计算机表示数据元素的逻辑关系:顺序存储、链式存储、索引存储、散列存原创 2021-08-22 11:19:26 · 882 阅读 · 0 评论