数据结构
文章平均质量分 91
Uestc_KK学习鼠鼠
当笔记用
展开
-
树(二)<C语言>
为避免指针悬空,可以增设一个头结点 ltag=0,left指向根结点,rtag=1,right指向遍历序列中最后一个结点,遍历序列中的第一个结点的left和最后一个结点的right都指向头结点。例:已知二叉树的先序遍历 {A,B,,C,D,E,F,G,H,I,J},中序遍历{C,D,B,F,E,A,I,H,G,J},构造出相应的二叉树。基本思想:(1)建立一个栈 (2)根结点进栈,遍历左子树 (3)根结点出栈,输出根结点,遍历右子树。否则,申请新结点空间,复制根结点,递归复制左子树,递归复制右子树。原创 2023-11-22 18:12:56 · 51 阅读 · 0 评论 -
树(四)<C语言>
(1)根据n个给定的权值{W1,W2,...Wn,}构成n棵二叉树的森林F={T1,T2,...,Tn},其中Ti只有一个带权Wi的根结点。结点数目相同的二叉树中,完全二叉树是路径最短的二叉树,但路径最短的二叉树不一定是完全二叉树,因为叶子结点可以移动到其他位置。(2)在F中选取两棵根结点的权值最小的树作为左右子树,构造一棵新的二叉树,且设置新的二叉树的根结点的权值为左右子树根结点的权值之和。如图:从A到B,C,D,E,F,G,H,I的路径长度分别为1,1,2,2,2,2,3,3。结点的路径长度之和。原创 2023-11-22 19:08:13 · 55 阅读 · 0 评论 -
树(一)<C语言>
树(Tree)是n(n>=0)个结点的有限集。若n=0,则称为空树。若n>0 则满足:(1)在任何一棵非空树中,有且只有一个特定的称为根(root)的结点;(2)其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合又是一棵树,并且成为根的子树(SubTree)。二叉树是n(n>=0)个结点的有限集,它或者是空集(n=0),或者是由一个根结点及两颗互不相交的分别称作这个根的左子树和右子树的二叉树组成(1)每个结点最多有两个孩子(二叉树中不存在度数大于2的结点);原创 2023-11-15 19:18:00 · 151 阅读 · 1 评论 -
图(1)<C语言>
(3)创建邻接表,依次输入每条边依附的两个顶点,确定两个顶点的i和j,建立边结点,将次边结点分别插入到vi和vj对应的两个边链表头部。:设有两个图G=(V,{E}),G1=(V1,{E1}),如果V1属于V,{E1}属于{E},则称G1是G的子图。(2)邻接矩阵的空间复杂度为O(n^2),而邻接表的空间复杂度为O(n+e)。(1)在有向图的邻接矩阵中,第i行为以vi为尾的弧(出度边), 第i列为以vi为头的弧(入度边)。:该子图是G的连通子图,将G的任何不在该子图中的顶点加入,子图不再连通。原创 2023-11-24 20:45:18 · 1786 阅读 · 1 评论 -
队列<C语言版>
队列是一种常用,重要的数据结构。它是一种只允许在一端进行插入操作(入队),在另一端进行删除操作(出队)的运算受到限制线性表,简称“队”。与同线性表相同,逻辑结构仍是一对一的关系。队列采取一种先进先出的数据结构(FIFO结构)。队列存在两种存储结构:顺序存储结构和链式存储结构。队列如同排队打饭,先排的人先打饭,然后出队,后来的人排后面,后打饭。原创 2023-11-05 19:19:08 · 48 阅读 · 1 评论 -
单链表汇总<C语言版>
咸鱼学习单链表的笔记原创 2023-10-28 17:04:12 · 90 阅读 · 1 评论 -
图(2)<C语言>
若在图中存在弧(u,Vk) ,且(vo,u) + (u,vk) < (vo,vk),则以路径(vo,u,vk) 代替(vo,vk),在调整后的各条路径中,再找长度最短的路径,依此类推。另p(i)表示,则p(1)=0,p(2)=2,p(3)=3,p(4)=0,p(5)=2,p(6)=3,p(7)=0,p(8)=0,p(9)=3,p(10)=0,p(11)=0。(1)设连通网N= (V, E),令最小生成树初始状态为只有n个顶点,而无边的非连通图T=(V,{ }),每个顶点自成一个连通分量。原创 2023-12-20 21:53:53 · 800 阅读 · 1 评论 -
循环链表和双向链表<C语言版>
循环链表是一种头尾相接的链式存储结构。它的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。循环链表的优点是从表中任意结点出发都可以找到表中其他结点。由于表的操作往往是在表的首尾进行的,当头指针表示单链表循环时,找结点1和结点n的时间复杂度分别为O(1)和O(n);当尾指针表示单链表循环时,找结点1和结点n的时间复杂度都为O(1),故通常用尾指针。int data;双向链表是在单向链表基础上的一个改进,每个节点指向其直接前驱和直接后继节点。原创 2023-11-01 22:00:31 · 55 阅读 · 1 评论 -
树(三)<C语言>
把每个结点的孩子结合排列起来,看成一个线性表,用单链表存储,则n个结点有n个孩子链表(叶子结点的孩子链表为空)。(1)加线:若p结点是双亲结点的左孩子,则将p的右孩子,右孩子的右孩子......沿分支找到所有右孩子,都与p的双亲用线相连。(1)抹线:将二叉的根结点与其右孩子连线,以及沿右分支搜索到的所有右孩子连线全部抹去,使之变成孤立的二叉树。(3)以第一棵树的根为二叉树的根,再以根结点为轴心,顺时针旋转,构成二叉树结构。(2)抹线:对每个结点,除了其左孩子外,去除其与其余孩子间的关系。原创 2023-11-22 19:07:30 · 45 阅读 · 0 评论 -
排序Sort
排序:将一组杂乱无章的数据按一定规律顺次排列起来。即,将无序序列排成一个有序序列(由小到大或由大到小)的运算。如果参加排序的数据结点包含多个数据域,那么排序往往是针对其中某个域而言。原创 2023-12-22 12:01:40 · 1203 阅读 · 0 评论 -
栈<C语言版>
栈是一种常用的,重要的数据结构。是一种只允许在一端进行插入或删除操作的线性表。栈一重点是后进先出(LIFO结构)。栈与同线性表的逻辑结构相同,仍然是一对一的关系。栈按储存结构分为顺序栈和链栈,以顺序栈为主。顺序栈的定义可以分为静态分配和动态分配两种,两种分配定义如下int top;}SqStack;//静态分配静态分配包括一个data静态数组用于存放栈中元素,以及整型top充当栈顶指针(虽然是整型,但可以代表数组的下标,充当指针的左右)int *top;int* base;}SqStack;原创 2023-11-05 17:39:48 · 49 阅读 · 1 评论 -
查找Search
例:关键码集为{47,7,29,11,16,92,22,8, 3},表长取m,m为11,散列函数为Hash(key)=key mod 11;两种理解:(1)C结点穿越A,B上升,B结点成为C的右孩子,A结点成为C的左孩子,原来C结点的左子树β作为A的右子树,原来C结点的右子树γ作为B的左子树。两种理解:(1)C结点穿越A,B上升,B结点成为C的左孩子,A结点成为C的右孩子,原来C结点的左子树β作为B的右子树,原来C结点的右子树γ作为A的左子树。查找结果给出整个记录的信息,或指示该记录在查找表中的位置。原创 2023-12-24 17:02:08 · 761 阅读 · 1 评论