挑战程序设计笔记总结
Xuannn_n
社畜
展开
-
【挑战程序设计竞赛】 堆
堆堆完全二叉树二叉堆完全二叉树题目思路代码最大最小堆题目思路代码优先级队列题目思路代码 堆 完全二叉树 所有叶结点深度相同,且所有内部结点都有两个子结点的二叉树。 设结点数为n,则完全二叉树的树高就是log2(n)。 二叉堆 如果一颗完全二叉树各结点的键值与一个数组的各元素具备一种对应关系,则这个完全二叉树称为二叉堆。 完全二叉树 题目 请设计一个程序,读取以完全二叉树形式表示的二叉堆,并按照下述格式输出二叉堆各结点的数据。 node id:key=k,parent key=pk,left key=lk,r原创 2020-09-16 11:22:00 · 83 阅读 · 0 评论 -
【挑战程序设计竞赛】二叉搜索树
二叉搜索树插入题目思路代码搜索题目思路代码删除题目思路代码 插入 题目 请编写一个程序,对二叉搜索树T执行以下命令: insert k:插入键值key print:分别用树的中序遍历和前序遍历算法输出键值 思路 insert以根为起点寻找结点z该插入的位置。设当前结点x,如果z的键值小于x则将当前结点的左子结点作为下一个x,反之则以右为下一个,不断向叶结点搜索。 程序将前一个节点保存在y里,用作z的候选父结点。当x抵达nil时搜索结束,此时y就是z的父结点。 如果搜索结束时y仍然为NIL,就代表插入前的二叉原创 2020-09-03 09:37:42 · 577 阅读 · 3 评论 -
【挑战程序设计竞赛】树
树有根树的表达题目思路代码 有根树的表达 题目 请编写一个程序,输出给定有根树T中各节点u的信息。 思路 采用“左子右兄弟表示法”: 1、结点u的父节点 2、结点u最左侧的子结点 3、结点u右侧紧邻的兄弟结点 引用u.parent即可知道结点u的父结点,不存在父结点就是跟。不存在u.left的结点是叶子结点。不存在u.right的结点为最右侧子结点。 代码 ...原创 2020-08-30 13:50:53 · 151 阅读 · 0 评论 -
【挑战程序设计竞赛】高等排序
高等排序归并排序题目思路代码分割排序题目思路代码快速排序题目思路代码计数排序题目思路代码 归并排序 题目 利用归并排序法将包含n个整数的数列S按升序排序。另外,请报告merge中总共执行了多少次比较运算。 思路 归并排序: 以整个数组为对象执行mergeSort mergeSort如下所示: 1、将给定的包含n个元素的局部数组“分割”成两个局部数组,每个数组包含n/2个元素。 2、对两个局部数组分别执行mergeSort排序。 3、通过merge将两个已排序完毕的局部数组“整合”成一个数组。 当局部数组原创 2020-08-28 22:23:46 · 421 阅读 · 0 评论 -
【挑战程序设计竞赛】 递归与分治算法
递归与分治算法穷举搜索题目思路代码科赫曲线题目思路代码 将问题分解,通过求解局部性的小问题来解决原本的问题,这种技巧称为分治法。 实现分治法需要用到递归。 使用递归的技巧,可以将一个问题拆分成两个或更多较小的局部问题,利用递归函数求每个局部问题的解,然后再将整个结果整合,最终解决问题。 分治法: 将问题“分割”成局部问题 递归地求解局部问题 将局部问题的解“整合”,解决原问题。 穷举搜索 题目 现有长度为n的数列A和整数m。请编写一个程序,判断A中任意几个元素相加是否能得到m。A中每个元素只能使用一次。原创 2020-08-27 21:39:31 · 404 阅读 · 0 评论 -
【挑战程序设计】 搜索
搜索线性搜索题目思路代码 基本搜索法有:线性搜索、二分搜索、散列法。 线性搜索 线性搜索就是从数组开头顺次访问各元素,检查该元素是否与目标值相等。若未发现目标值,则返回一个特殊值说明情况。 题目 请编写一个程序,输入包含n个整数的数列S以及包含q个不重复整数的数列T,输出既包含于T也包含于S的整数个数C。 思路 向线性搜索中引入“标记”可以将算法效率提高常数倍。“标记”就是我们在数组等数据结构中设置的一个拥有特殊值的元素。 在线性搜索中,我们可以把含有目标关键字的数据放在数组末尾,用作标记。 代码 ...原创 2020-08-26 22:17:22 · 481 阅读 · 0 评论 -
【挑战程序设计竞赛】数据结构
数据结构逆波兰表示法(栈)思路代码模拟循环调度法(队列)思路代码 逆波兰表示法(栈) 逆波兰表示法是将运算符写在操作数后面的描述程序(算法)的方法。 思路 顺序栈,创建一个数组表示栈。 根据逆波兰表示法完成进栈、出栈操作。(遇到数字进栈,直到遇到计算符号,将数字出栈进行计算后结果入栈)。 代码 #include <stdio.h> #include <string.h> #include <stdlib.h> //表示栈的指针和顺序栈 int top,S[1000]原创 2020-08-25 16:36:59 · 373 阅读 · 0 评论 -
【挑战程序设计竞赛】 初等排序(排序总结1)
初等排序插入排序算法思路代码总结冒泡排序算法思路代码选择排序算法思路代码总结希尔排序法算法思路代码 插入排序 算法思路 1、将开头元素视为已排序 2、执行以下操作,直到未排序部分消失 取出未排序部分开头元素赋值给v 在已排序部分,将所有比v大的元素向后移动一个单位 将已取出的元素v插入空白单位 代码 /*插入排序*/ int insertionSort(int a[],int N){ int j,i,v; for(i=1;i<N;i++){ v=a[i]; j=i-1; while原创 2020-08-18 23:08:04 · 134 阅读 · 0 评论