10 2023 档案

关于字符串有关的指针
摘要:#include <stdio.h> #include <stdlib.h> int main() { char* s=malloc(sizeof(char)*100); scanf("%s",s); //指针变量就相当于地址 printf("%s",s); //打印的是字符串s return 0; 阅读全文

posted @ 2023-10-31 14:25 四马路弗洛伊德 阅读(21) 评论(0) 推荐(0)

快速排序C实现
摘要:在数据结构中的快速排序实现,未将原数组排序为递增或递减的序列,该C语言通过指针将原数组进行了改变。 low和high的数值交换: void Swap(int *a,int *b) { int p=*b; *b=*a; *a=p; } Partition(分区函数):通过内层while可看出快速排序不 阅读全文

posted @ 2023-10-26 19:12 四马路弗洛伊德 阅读(22) 评论(0) 推荐(0)

树的基本性质
摘要:满二叉树是一棵完美平衡的二叉树 完全二叉树是一棵二叉树,除了最后一层外,其他层的节点都是满的,且最后一层的节点都靠左排列 平衡二叉树的任意节点的左子树和右子树的高度差不超过1 阅读全文

posted @ 2023-10-17 21:42 四马路弗洛伊德 阅读(38) 评论(0) 推荐(0)

中缀表达式转前后缀表达式
摘要:将中缀表达式a/(b+c*d)-e/f转换为后缀表达式的步骤如下:1. 创建一个空栈和一个空字符串,用于存储结果。2. 从左到右遍历中缀表达式的每个字符: - 如果是操作数(字母或数字),直接添加到结果字符串中。 - 如果是操作符: - 如果栈为空,或者栈顶操作符为左括号"(",则将当前操作符入栈。 阅读全文

posted @ 2023-10-17 21:25 四马路弗洛伊德 阅读(124) 评论(0) 推荐(0)

哈希函数
摘要:除留余数法是一种常用的哈希函数方法,用于将关键字映射到哈希表中的索引位置。在除留余数法中,可以使用以下公式计算哈希值:哈希值 = 关键字 % p p是不大于L或等于L的质数其中,关键字是要进行哈希映射的值,哈希表大小是哈希表的长度,哈希值是最终计算得到的索引位置。装填因子是n,一共有m个关键字。装填 阅读全文

posted @ 2023-10-17 21:06 四马路弗洛伊德 阅读(213) 评论(0) 推荐(0)

排序算法稳定性分类
摘要:稳定排序算法是指在排序过程中能够保持相等元素的相对顺序不变的排序算法。以下是一些常见的稳定排序算法:1. 冒泡排序(Bubble Sort)2. 插入排序(Insertion Sort)3. 归并排序(Merge Sort)4. 计数排序(Counting Sort)5. 基数排序(Radix So 阅读全文

posted @ 2023-10-17 20:45 四马路弗洛伊德 阅读(181) 评论(0) 推荐(0)

将数组中偶数放到奇数前,要求时间复杂度为O(N),空间复杂度为O(1)
摘要:#include <stdio.h> void Move(int A[],int n) { int j=0; int i=0; int temp; for(;i<n;i++) { if(A[i]%2==0) { temp=A[j]; A[j]=A[i]; A[i]=temp; j++; } } } 阅读全文

posted @ 2023-10-17 20:32 四马路弗洛伊德 阅读(20) 评论(0) 推荐(0)

求叶子结点个数
摘要:递归求叶子结点个数 背 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *lchild,*rchild; }TreeNode,*Tree; void CreateTree(Tree & 阅读全文

posted @ 2023-10-16 19:46 四马路弗洛伊德 阅读(52) 评论(0) 推荐(0)

144-18 中序创建线索二叉树
摘要:同理,先序创建线索二叉树只需要将InThread中的某部分调换位置 死记硬背 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *lchild,*rchild; int lefttag, 阅读全文

posted @ 2023-10-16 19:22 四马路弗洛伊德 阅读(28) 评论(0) 推荐(0)

144-17
摘要:判断两树相似,相似是指,两个树都存在对应的左子树或右子树 递归方法 当两个结点都是空时:return 1; 当两个结点有一个为空时:return 0; 当两个都不为空时,开始递归,并返回左右子树的&&值 #include <stdio.h> #include <stdlib.h> typedef s 阅读全文

posted @ 2023-10-15 19:36 四马路弗洛伊德 阅读(32) 评论(0) 推荐(0)

144-16
摘要:设计一个算法,将二叉树的叶结点按从左到右的顺序连成一个单链表,表头指针为Head,二叉树按照二叉链表方式存储,链接时用叶结点的右指针域来存放单链表指针。 只需要找到叶子节点,然后将第一个叶子节点赋值给Head,其余的叶子结点按照顺序使用自己的右指针连接起来 #include <stdio.h> #i 阅读全文

posted @ 2023-10-15 19:31 四马路弗洛伊德 阅读(48) 评论(0) 推荐(0)

144-15
摘要:对满二叉树,知其先序序列,求后序序列 直接背代码吧,反正也不难 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *lchild,*rchild; }TreeNode,*Tree; vo 阅读全文

posted @ 2023-10-13 22:01 四马路弗洛伊德 阅读(43) 评论(0) 推荐(0)

144-14
摘要:求树宽 与非递归求树高相同,只不过是将high++变成了最大值的判断 #include <stdio.h> #include <stdlib.h> #define MaxSize 100 typedef struct node{ int data; struct node *lchild,*rchi 阅读全文

posted @ 2023-10-13 20:47 四马路弗洛伊德 阅读(78) 评论(0) 推荐(0)

144-13
摘要:给定结点p,q,在二叉树中找到两结点最近的祖宗结点 1. 首先,检查当前节点T是否为空,或者是否等于节点p或节点q。如果是,直接返回当前节点T,表示找到了p或q节点,或者已经遍历到叶子节点。2. 如果当前节点T不满足上述条件,则递归地处理左子树和右子树。3. 在左子树中递归调用`ANCESTOR`函 阅读全文

posted @ 2023-10-12 22:04 四马路弗洛伊德 阅读(40) 评论(0) 推荐(0)

144-12
摘要:在二叉树中查找值为x的结点,找出该结点所有的祖宗结点,值为x的结点个数不多于1个 利用二叉树的后序非递归遍历,在Pop函数后判断是否结点值是否等于x,若等于,栈中全是x的祖宗结点,依次弹出 #include <stdio.h> #include <stdlib.h> #define MaxSize 阅读全文

posted @ 2023-10-12 21:01 四马路弗洛伊德 阅读(42) 评论(0) 推荐(0)

144-11
摘要:给定二叉树,删除结点值为x的左右子树 利用层次遍历找到结点值为x的左右子树,分别删除; 删除算法 void Delete(Tree &T) { if(T) { Delete(T->lchild); Delete(T->rchild); free(T); } } 完整算法 #include <stdi 阅读全文

posted @ 2023-10-11 22:03 四马路弗洛伊德 阅读(52) 评论(0) 推荐(0)

144-10 感觉有点难
摘要:二叉树使用二叉链表存储,求先序序列中第k个结点的值 首先明确先序遍历是根-左-右,使用递归算法,先左子树,后右子树。 为了防止在找到第k个结点之前就进入右子树的遍历,可以在递归调用时,将左子树的返回值存储在一个变量中,并进行判断。 如果左子树的返回值不等于特定的值(例如-1),则表示已经找到第k个结 阅读全文

posted @ 2023-10-11 21:42 四马路弗洛伊德 阅读(30) 评论(0) 推荐(0)

144-9
摘要:链式存储的二叉树,交换左右结点位置 递归 #include <stdio.h> #include <stdlib.h> #define MaxSize 100 typedef struct node{ int data; struct node *lchild,*rchild; }TreeNode, 阅读全文

posted @ 2023-10-11 20:55 四马路弗洛伊德 阅读(29) 评论(0) 推荐(0)

143-8
摘要:二叉树采用二叉链表存储,计算给定二叉树的所有双分支结点个数 递归思想 当根结点不存在左右结点时,return 0; 当根节点存在左右结点时,return Count(T->lchild)+Count(T->rchild)+1; 当根节点只存在一个结点时,return Count(T->lchild) 阅读全文

posted @ 2023-10-11 20:47 四马路弗洛伊德 阅读(31) 评论(0) 推荐(0)

143-7
摘要:树结点由二叉链表存储,判定给定的树是否是完全二叉树 用到了辅助队列 只要出队的结点非空,就将其左右结点入队,无论左右结点是否为空。 若出队的结点为空,就让队列结点依次出队,若存在非空结点,就说明树不是完全二叉树。 #include <stdio.h> #include <stdlib.h> #def 阅读全文

posted @ 2023-10-11 20:28 四马路弗洛伊德 阅读(25) 评论(0) 推荐(0)

143-6
摘要:二叉树的结点值各不相同,先序序列和中序序列分别存储在数组A和B中,设计算法构建二叉树 使用递归 1、使用指针传入数组,方便进行根节点操作。 TreeNode* BuildTree(int *A,int Alen,int *B,int Blen) T->lchild=BuildTree(A+1,ind 阅读全文

posted @ 2023-10-10 21:39 四马路弗洛伊德 阅读(30) 评论(0) 推荐(0)

143-5
摘要:非递归求树高,包括递归求树高 current记录每次入队出队操作后队列中结点数,每一个结点出队时--,每一个结点入队时++ previous记录每层结点数,出队操作时-- 当previous==0时,即队列中不存在该层结点且当前队列中是下一层结点。此时,high++。让previous=curren 阅读全文

posted @ 2023-10-10 20:57 四马路弗洛伊德 阅读(32) 评论(0) 推荐(0)

143-4
摘要:二叉树自下而上,从右到左的层次遍历算法 相较于普通的层次遍历,该算法,只是利用栈的特点,将一系列元素反转。 层次遍历的每一个结点依次进栈,最后再将依次出栈 #include <stdio.h> #include <stdlib.h> #define MaxSize 100 typedef struc 阅读全文

posted @ 2023-10-09 22:06 四马路弗洛伊德 阅读(18) 评论(0) 推荐(0)

TreeAPI 递归和非递归遍历
摘要:只包含递归和非递归遍历 #include <stdio.h> #include <stdlib.h> #define MaxSize 20 typedef struct node{ int data; struct node *lchild,*rchild; }TreeNode,*Tree; typ 阅读全文

posted @ 2023-10-09 21:34 四马路弗洛伊德 阅读(33) 评论(0) 推荐(0)

143-3 二叉树后序非递归遍历
摘要:二叉树的后序非递归遍历 使用辅助栈 r指针的作用是判断该结点是否遍历过 #include <stdio.h> #include <stdlib.h> #define MaxSize 20 typedef struct node{ int data; struct node *lchild,*rchi 阅读全文

posted @ 2023-10-09 20:57 四马路弗洛伊德 阅读(29) 评论(0) 推荐(0)

39-20
摘要:设头指针为L的带头结点的双向非循环链表,结点类型定义如下,count指被访问次数。 typedef struct node{ int data; int count; struct node *pre,*next;}LNode,*LinkList; Locate(L,x)函数,x为结点值,每访问一次 阅读全文

posted @ 2023-10-08 22:06 四马路弗洛伊德 阅读(28) 评论(0) 推荐(0)

39-19
摘要:设有有一个带头结点的循环单链表,反复找出单链表中最小的结点并删除,直至链表为空 注意删除需要释放空间,包括释放最后的链表头结点 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *nex 阅读全文

posted @ 2023-10-08 21:10 四马路弗洛伊德 阅读(21) 评论(0) 推荐(0)

39-18
摘要:有两个循环单链表,链表头指针分别指向A,B,将A,B连接起来,并保持循环。 没有说明是带头结点或不带头结点的循环链表,我使用的是不带头结点的循环单链表 不带头结点的循环单链表,在遍历时需要注意对最后一个结点的处理: void displayList(LinkList L) { LNode *p=L; 阅读全文

posted @ 2023-10-08 20:53 四马路弗洛伊德 阅读(27) 评论(0) 推荐(0)

39-17
摘要:设计一个算法用于判断带头结点的循环双链表是否对称 循环双链表!! #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *pre,*next; }LNode,*LinkList; void 阅读全文

posted @ 2023-10-08 20:01 四马路弗洛伊德 阅读(32) 评论(0) 推荐(0)

39-16
摘要:两个整数序列存放在单链表A,B 中,设计一个算法,判断B是否是A的连续子序列 算法思想类似于朴素匹配算法。 遇到不匹配的,A需要记录与B开始匹配的位置(pre指针的作用),从该位置的下一个结点开始匹配,B从头开始匹配。 #include <stdio.h> #include <stdlib.h> t 阅读全文

posted @ 2023-10-07 21:51 四马路弗洛伊德 阅读(24) 评论(0) 推荐(0)

39-15
摘要:已知两个链表A,B分别表示两个集合,其元素递增排列,求A,B的交集,并存放在A中。 题目中没有给出释放B的结点,我的想法是只需要释放A中多余的结点,但是答案也让释放B的结点 #include <stdio.h> #include <stdlib.h> typedef struct node{ int 阅读全文

posted @ 2023-10-07 20:55 四马路弗洛伊德 阅读(42) 评论(0) 推荐(0)

39-14
摘要:设A,B是两个带头结点的单链表,其中元素递增有序,设计一个算法从A和B中的公共元素产生单链表C,要求不破坏A,B的结点 不破坏A,B的结点,就是赋值操作,相当于重新创建了一个单链表 #include <stdio.h> #include <stdlib.h> typedef struct node{ 阅读全文

posted @ 2023-10-07 20:17 四马路弗洛伊德 阅读(37) 评论(0) 推荐(0)

39-13
摘要:假设有两个按元素值递减次序排列的线性表,均以单链表的形式存储,编写算法,将这两个单链表合成一个按值递减的单链表,使用原链表的结点。 没啥好说的,这个有手就行 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; s 阅读全文

posted @ 2023-10-06 20:25 四马路弗洛伊德 阅读(32) 评论(0) 推荐(0)

38-12
摘要:在一个递增有序的单链表中,有数值相同的元素存在。去掉数值相同的元素,是表中不再有重复的元素。 双指针解决链表的百分之60的问题,三指针解决百分之80的问题,四指针解决百分之99的问题 脑子不够,指针来凑 #include <stdio.h> #include <stdlib.h> typedef s 阅读全文

posted @ 2023-10-06 20:08 四马路弗洛伊德 阅读(27) 评论(0) 推荐(0)

38-11
摘要:设C={a1,b1,a2,b2,.....,an,bn};使用带头结点的单链表,将C分割成A={a1,a2,a3,....,an};,B={bn,bn-1,....,b2,b1}; 注意B是逆置,应采用头插法 对于abababab这种结点,可以使用count记录奇偶,也可以一个while循环中分别对 阅读全文

posted @ 2023-10-06 19:49 四马路弗洛伊德 阅读(32) 评论(0) 推荐(0)

38-10
摘要:将一个带头结点的单链表A分解为两个带头结点的单链表A和B,使得A表中含有序号为奇数的元素,B表含有序号为偶数的元素,且保持相对顺序不变 应好好分析指针变化,可减少冗余代码!!! #include <stdio.h> #include <stdlib.h> typedef struct node{ i 阅读全文

posted @ 2023-10-06 12:12 四马路弗洛伊德 阅读(45) 评论(0) 推荐(0)

38-9
摘要:给定一个带头结点的单链表,按递增次序输出单链表中各结点的数据元素,并释放空间。不允许使用辅助数组 使用直接插入排序,将链表递增,然后进行遍历删除操作 时间复杂度为O(N²) #include <stdio.h> #include <stdlib.h> typedef struct node{ int 阅读全文

posted @ 2023-10-06 11:48 四马路弗洛伊德 阅读(56) 评论(0) 推荐(0)

38-8
摘要:给定两个链表,编写算法找出两个链表的公共结点 公共结点是指地址相同的结点,只有结点个数相同时,地址才会相同,画图理解 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }L 阅读全文

posted @ 2023-10-06 10:38 四马路弗洛伊德 阅读(23) 评论(0) 推荐(0)

38-7
摘要:带头结点的单链表中所有元素结点的值无序,编写一个函数,删除介于min和max之间的结点 删除操作中,快慢指针是最优解 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }L 阅读全文

posted @ 2023-10-06 09:55 四马路弗洛伊德 阅读(38) 评论(0) 推荐(0)

38-6
摘要:有一个带头结点的单链表L,设计一个算法使其元素递增有序 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }LNode,*LinkList; void TailCreate 阅读全文

posted @ 2023-10-06 09:46 四马路弗洛伊德 阅读(45) 评论(0) 推荐(0)

38-5
摘要:编写带头结点的算法,就地逆置 小心断链 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }LNode,*LinkList; void TailCreate(LinkLis 阅读全文

posted @ 2023-10-05 20:44 四马路弗洛伊德 阅读(37) 评论(0) 推荐(0)

38-4
摘要:编写在带头结点的单链表L中删除最小值结点的高效算法,最小值结点唯一 先在while中找到最小值结点,再释放空间 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }LNod 阅读全文

posted @ 2023-10-05 20:31 四马路弗洛伊德 阅读(17) 评论(0) 推荐(0)

38-3
摘要:设L为带头结点的单链表,编写算法实现从尾到头输出。 有两种方法 1、递归 空间复杂度O(1) 2、栈 空间复杂度O(N) 仅实现了递归算法。 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct no 阅读全文

posted @ 2023-10-05 20:18 四马路弗洛伊德 阅读(31) 评论(0) 推荐(0)

38-2
摘要:在带头结点的单链表L中,删除所有值为x的结点且值为x的结点不唯一,并释放空间 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }LNode,*LinkList; void 阅读全文

posted @ 2023-10-05 20:09 四马路弗洛伊德 阅读(29) 评论(0) 推荐(0)

38-1
摘要:设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点 #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }LNode,*LinkList; void CreateL 阅读全文

posted @ 2023-10-05 19:44 四马路弗洛伊德 阅读(38) 评论(0) 推荐(0)

导航