数据结构
元学习研究生小白
这个作者很懒,什么都没留下…
展开
-
七大排序算法(上)
排序算法1、冒泡排序2、直接插入排序3.希尔排序4.直接选择排序算法1、冒泡排序比较前后两个相邻的数据,如果前面的数大于后面的数,就交换位置void Bubblesort(int a[],int n){ int flag = n;//记录最后一次交换的位置 while(flag>0) { int k = flag; flag = 0; for(int j = 1;j<k;j++) { if(a[j-1]>a[j]) { swap(a[j-1原创 2021-06-07 15:48:15 · 69 阅读 · 0 评论 -
树---二叉树(二)
文章目录二叉树的定义二叉树的特点二叉树的对象数据类型二叉树的性质特殊二叉树二叉树的存储结构遍历二叉树二叉树的定义定义:每个结点最多只有两个分支的树。1.二叉树的结构最简单,规律性最强;2.所有书都可以转为唯一对应的二叉树,不失一般性。用一个根节点及两棵互不相交的分别称作这个跟的左子树和柚子树的二叉树组成。二叉树的特点特点:1.每个结点最多有两个孩子(不存在度大于2 的结点)2.子树有左右之分3.二叉树可以是空集合,根可以有空的左子树或右子树。二叉树的对象数据类型ADT Binary原创 2021-04-25 16:21:22 · 191 阅读 · 0 评论 -
树---基本概念(一)
定义树是n(n>=0)个结点的有限集。当n=0时,称为空树;当=>0时,有且仅有一个特定的称为根(root)的结点;其余节点可以分为m(m>0)个互补相交的优先级,T1,T2,…Tm.其中每个集合本身又是一棵树,并称为根的子树(subtree)。术语1.根节点:无前驱结点。2.结点的度:结点拥有的子树数量,或者分支数量。3.树的度:树内各节点的度的最大值;其中度为0的结点称为叶子结点。4.树的深度:树中结点的最深层次。5.有序树:树中结点的各子树从左至右有次序。6.无序原创 2021-04-25 15:20:33 · 190 阅读 · 0 评论 -
栈的表示与实现操作
1.顺序栈2.链栈顺序栈利用一组地址连续的存储单元依次存放栈底到栈顶的数据元素。1.顺序栈的表示栈有两个指针:top指向栈顶元素之上base指向栈底元素空栈:top == base满栈:top-base = stacksize入栈:top上移,出栈top下移特点:后进先出,方便简单,容易溢出# define MAXSIZE 100typedef struct{ SElem Type *base; SElem Type *top; int stacksize;}Sqstack;原创 2021-04-19 21:27:16 · 391 阅读 · 0 评论 -
栈和队列
栈和队列是限定插入和删除只能在表的“端点”进行的线性表。栈:只能在表尾进行插入和删除操作,遵循后进先出的原则。栈的应用:数值的转换、括号匹配的检验、迷宫求解、表达式求值、八皇后问题、函数调用、递归调用的实现栈分为栈顶(表尾top)和栈底(表头base)入栈push、出栈pop队列:只能在表尾插入,在表头删除,遵循先进先出的原则。队列的应用:排队问题队列分为队尾和队首...原创 2021-04-17 22:03:57 · 102 阅读 · 0 评论 -
线性表的应用
1.线性表的合并两个线性表La,Lb 分别表示两个集合,要求新的集合A=AUB。算法步骤:1.依次取出B中的每个元素;2.在La中查找该元素;3.如果不含,就插在La的末尾。void union(List &La,List &Lb){La-len = Listlength(La);Lb-len = Listlength(Lb);//获取表长for(i = 1;i<=Lb-len;i++) { GetElem(Lb,i,e);//获取元素 if(!Locat原创 2021-04-17 21:39:36 · 482 阅读 · 2 评论 -
串---BF算法
在主串中定位子串int Index(SString S,SString T,int pos){int i = pos;//主串中匹配的位置int j = 1;//子串中匹配的位置while(i<=S[0]&&j<=T[0])//串的长度存储在第一个位置{ if(S[i]==T[j]) { ++i; ++j;//如果两个值相等就继续比较 } else {i=i-j+2; j=1;//否则就回溯 }if(j>T[0]){ retur原创 2021-04-14 15:30:37 · 74 阅读 · 0 评论 -
单链表的操作
1.单链表的表示typedef struct Lnode {ElemType data;struct Lnode * next;}Lnode,*LinkList;2.单链表的初始化即如何构造一个空表。算法思想:1.生成新结点作为头结点,用头指针L指向头结点;2.将头结点的指针域置空。Status InitList(LinlList &L){L = new Lnode;L->next = NULL;return OK;}3.判断单链表是否为空算法思想:判断头结点原创 2021-04-13 11:46:28 · 182 阅读 · 0 评论 -
数据结构---链表
1.链表的定义定义:节点在存储器中的位置是任意的,即逻辑上相邻的数据元素在物理结构上不一定是相邻的。也叫作非顺序映像或者链式映像。2.结点构成与顺序表相比,链表出了存储数据,还要存储下一个结点的地址即它由两部分组成:数据域和指针域3.分类1.单链表:只有一个指针域的链表,也叫线性链表。一般指带有头结点的单链表,即头指针->头结点->首元结点优点:在处理首元结点的时候更方便,第一个位置与其他位置相同,无需特殊处理;也便于空表与非空表统一处理。2.双链表:有两个指针域的链表,分别存原创 2021-04-12 22:21:08 · 849 阅读 · 0 评论 -
顺序表中的操作
1.在顺序表中获得第i个元素算法伪代码:status GetElem_L(LinkList L,int i,ElemType *e){if(L->length==0) //空表返回错误return ERROR;if(i<1||i>L->length)//获取位置不在表范围内返回错误return ERROR;*e=L.data[i-1];return OK;}2.在顺序表中插入元素算法伪代码:status ListInsert(LinkList *L,int原创 2021-04-05 17:24:44 · 229 阅读 · 0 评论 -
数据结构---顺序表
1.顺序表的定义把逻辑上相邻的数据元素存储在物理上相邻的存储单元上的存储结构。即逻辑上相邻的在物理上也必须相邻,地址必须连续。2.顺序表的特点1.利用数据元素的存储位置标示线性表中相邻数据元素之间的前后关系,即线性表的逻辑结构与存储结构一致;2.在访问线性表时可以快速地计算出任何一个数据元素的存储地址,因此可以粗略地认为访问每个元素所花时间相等;3.随机存取法,时间复杂度O(1)3.顺序表的优缺点1.优点:存储密度大;可以随机存取表中的任一元素2.缺点:插入、删除时要大量移动;浪费存储空间原创 2021-04-05 15:52:05 · 293 阅读 · 0 评论