
算法
文章平均质量分 71
cai-4
温柔是黑暗世界里永恒的光。
展开
-
查找与排序
算法可视化网站:算法可视化代码仓库地址:gitee-查找与排序顺序查找是一种最简单的线性查找方法。其基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的关键字和给定值k相比较,若当前扫描到的关键字与k相等,则查找成功;若扫描结束后,仍未找到关键字等于k的记录,则查找失败。为了提高查找速度,可以对上述算法进行改进,改进的顺序查找的基本思想:设置“哨兵”。哨兵就是待查值,将它放在查找方向的尽头处,免去了在查找过程中每一次比较后都要判断查找位置是否越界,从而提高了查找速度。例如如果查找方向是从左到右,则将待原创 2023-09-17 18:39:06 · 291 阅读 · 0 评论 -
408数据结构算法题目
例如S1={1,0,9},S2={-25,-10,10,11},S3={2,9,17,30,41},则最小距离为2,相应的三元组为(9,10,9)。所以说,我们想要获取到距离最短,那么改动b的位置是没有用的,甚至会让它距离更远(当b移动到[ a , c ] [a,c][a,c]外面以后)我们只能向右移动a,但是也有可能a移动太过了,比如超过了b,或者甚至超过了c,那么我们可以给它重新标个号,从左到右重新标为a,b,c。简而言之,只让最小的那个值往右走,这才会出现我们需要的尽可能小的状态!原创 2023-09-16 23:52:42 · 958 阅读 · 0 评论 -
线性结构测试
线性结构测试所属课程 数据结构与算法 总分 100.0一、单选题(共15题,每小题3.0分,共45.0分)1、 下列程序的时间复杂度是(D )。int i=1; while(i<=n)i=i*2;A、O(n)B、2)C、O(2n)D、n)标准答案:D2、 在带头结点的循环链表中,把头指针改为尾指针(rear)后,其首元结点的存储位置是(C)A、rearB、rear->nextC、rear->next->nextD、rear->data标准答案:C原创 2021-06-29 21:39:22 · 3659 阅读 · 6 评论 -
第九章 内部排序
第九章 内部排序插入排序 (Insert Sorting)交换排序 ( Exchange Sort )选择排序(Selection Sort)归并排序 (Merge Sort)基数排序 (Radix Sort)插入排序 (Insert Sorting)本章涉及的待排记录的数据类型定义为:#define MAXSIZE 20Typedef int KeyTypeTypedef struct {KeyType key; //关键字项 I原创 2021-06-17 12:00:58 · 280 阅读 · 0 评论 -
kpm算法下求next数组C语言
#include<stdio.h>#include<string.h>#include<stdlib.h>char a[105];char b[105];int next[105];int L1, L2;void f(){int i=0,j=-1;next[0]=-1;while(i<strlen(a)){if(j==-1||a[i]==a[j]){i++;j++;next[i]=j;}elsej=next[j];}}int原创 2021-06-16 16:04:38 · 401 阅读 · 0 评论 -
实验:查找
基本内容:算法1:采用顺序存储结构创建静态查找表,对查找表进行顺序查找和改进的顺序查找,并对其查找效率进行比较;算法2:采用顺序存储结构创建静态查找表——有序表,对有序表进行二分查找;编程实现按二叉排序树算法进行查找。实验原理(1)有序表的折半查找过程是:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止;(2)二叉排序树查找过程是:首先将给定值和根结点的关键字比较,若相等,则查找成功,否则将依据给定值和根结点的关键字之间的大小关系,分别在左子树或右子树上继续进行查找;原创 2021-06-13 21:59:45 · 827 阅读 · 0 评论 -
内部排序实验作业
以下程序利用直接插入排序和冒泡排序算法实现输入数据的排序,请补充完整代码。(填写答案时请注意:1)字符间不要有空格;2)答案中出现的变量名称严格区分大小写;3)答案中出现的点运算符“.“以及其他运算符号均为英文标点符号,请将输入法切换在英文半角状态下输入。)#include<stdio.h>#include<stdlib.h>#define MAXSIZE 50 typedef int KeyType;原创 2021-06-13 21:55:06 · 882 阅读 · 1 评论 -
实验6:排序
基本内容:采用顺序存储结构,完成顺序表的创建,实现对顺序表的直接插入排序、冒泡排序。并在此基本内容的基础上,实现对顺序表的快速排序或别的排序。实验原理(1)直接插入排序的基本思想是:通过一趟排序将待排序的当前记录插入到前面已经排好序的有序序列中,从而得到一个新的、记录数增1的有序序列。整个排序过程可简述为:先将序列中的第一个记录看成是一个有序的子序列,然后从第二个记录起逐个插入,直至整个序列有序。(2)快速排序是对起泡排序的一种改进,其基本思想是:通过一趟排序将带排记录分割成独立的两部分,其中一部分原创 2021-06-09 17:30:57 · 1515 阅读 · 1 评论 -
实验:图的应用
算法1:输入图的类型、顶点数、狐(边)数、顶点信息、狐(边)信息,建立相应的图(具体类型可以是无向图、有向图、无向网、有向网,采用邻接矩阵存储结构);分别按深度优先搜索和广度优先搜索遍历图;按某种形式输出图及遍历结果。实验源代码#include <stdio.h> #include <stdlib.h>#define OVERFLOW -2 #define ILLEGAL -1 #define OK 1原创 2021-05-27 13:19:40 · 1806 阅读 · 1 评论 -
树和二叉树的应用
树和二叉树的应用实验内容基本要求:算法:输入字符序列,建立二叉树;按先序、中序、后序遍历二叉树(三种递归算法和中序遍历的非递归算法);拟遍历的二叉树(此处画出你计划遍历的二叉树和此二叉树对应的二叉链表存储结构)实验源代码#include <stdio.h>#include <stdlib.h>#define OK 0#define OVERFLOW -2#define ERROR 0#define STACK_INIT_SIZE 100//存储空间初始分配量原创 2021-05-09 16:28:49 · 575 阅读 · 0 评论 -
树和二叉树
树和二叉树6.1 树的定义和基本术语6.2 二叉树6.3 遍历二叉树和线索二叉树6.1 树的定义和基本术语一. 树的抽象数据类型定义树的定义树是由n (n >=0)个结点组成的有限集合。如果n = 0,称为空树;如果n > 0,则:有且只有一个特定的称之为根(root)的结点,它只有后继,但没有前驱;除根以外的其它结点划分为m (m > 0)个互不相交的有限集合T1, T2, …, Tm,每个集合本身又是一棵树,并且称之为根的子树(SubTree)。每棵子树的根原创 2021-04-18 22:35:46 · 315 阅读 · 0 评论 -
数组和广义表
数组和广义表数组的定义数组是由一组类型相同的数据元素构成的有序集合,每个数据元素称为一个数组元素(简称为元素),每个元素受n(n≥1)个线性关系的约束,每个元素在n个线性关系中的序号i1、i2、…、in称为该元素的下标,并称该数组为 n 维数组。数组的特点:元素本身可以具有某种结构,属于同一数据类型;数组是一个具有固定格式和数量的数据集合。数组的基本操作:⑴ 存取:给定一组下标,读出对应的数组元素;⑵ 修改:给定一组下标,存储或修改与其相对应的数组元素。存取和修改操作本质上只对应一种操作原创 2021-04-14 22:26:32 · 357 阅读 · 0 评论 -
串
串4.1 串类型的定义(1)串(或字符串)串是由零个或多个字符组成的有限序列 ,记作S = ‘c1c2c3…cn’ (n>=0)其中,S是串名字,‘c1c2c3…cn’是串值ci是串中字符n是串的长度,表示串中字符的数目。空串:零个字符的串称为空串, 记作 “Ø”2)子串、主串子串:串中任意个连续的字符组成的子序列主串:包含子串的串例如:假设a、b、c、d为如下4个串a=‘BEI’ b=‘JING’c=‘BEIJING’ d=‘BEI JING’注原创 2021-04-14 22:07:48 · 919 阅读 · 0 评论 -
线性表的基本操作及应用
基本要求:(1)实现单链表的创建;(2)实现单链表的插入;(3)实现单链表的删除(4)实现单链表的查找;(5)实现单链表的显示;实验源代码#include <stdlib.h> #include <stdio.h>typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode, *LinkList;int createList(LinkList *L, int原创 2021-04-10 17:04:31 · 443 阅读 · 0 评论 -
栈和队列
栈和队列栈和队列是两种重要的线性结构。从数据结构的角度看,栈和队列是操作受限的线性表;3.1 栈抽象数据类型栈的定义:栈(stack):先进后出(FILO)或后进先出(LIFO)的线性表。仅在表尾进行插入和删除操作栈顶(top): 线性表的表尾端,即可操作端。栈底(bottom): 线性表的表头。抽象数据类型栈的定义:ADT Stack {数据对象:D ={ai | ai∈Elemset,(i=1,2,…,n, n≥0)}数据关系:R1 = {<ai-1,ai>|ai-1,ai ∈原创 2021-03-25 21:25:02 · 301 阅读 · 3 评论 -
数据结构c语言版习题
数据结构c语言版习题第一章 绪论一、选择题1.以下说法正确的是( D )。A、数据元素是数据的最小单位B、数据项是数据的基本单位C、数据结构是带有结构的各数据项的集合D、一些表面上很不相同的数据可以有相同的逻辑结构解析:A、B、C不对,正确答案是:数据项是数据的最小单位;数据元素是数据的基本单位;数据结构是带有结构的各数据元素的集合;D正确,如:windows系统中文件的组织架构图和一个单位的组织架构图,表面上是不相同的数据,但其实都是树形结构。2.计算机算法指的是解决问题的步骤序列原创 2021-03-21 17:16:16 · 14682 阅读 · 0 评论 -
线性表的链式表示与实现
1.单链表①特点用一组任意的存储单元存储线性表的数据元素利用指针实现了用不相邻的存储单元存放逻辑上相邻的元素每个数据元素ai,除存储本身信息外,还需存储其直接后继的信息结点:数据元素ai 的存储映像。 数据域:元素本身信息指针域:指示直接后继的存储位置定义:结点中只含一个指针域的链表。特征:每个元素(表项)由结点(Node)构成。线性结构结点可以不连续存储表可扩充最后一个节点的指针域为空头指针、头结点、第一个元素结点以线性表中第一个数据元素a1 的存储地址作为线性表的地址,称原创 2021-03-18 21:02:59 · 761 阅读 · 0 评论 -
三元组的抽象数据类型
基本要求:设计实现抽象数据类型“三元组”,要求动态分配内存。每个三元组由任意三个实数的序列构成,基本操作包括:创建一个三元组,取三元组的任意一个分量,置三元组的任意一个分量,求三元组的最大分量,求三元组的最小分量,显示三元组,销毁三元组等。ADT 抽象数据类型名 {数据对象:<数据对象的定义>数据关系:<数据关系的定义>基本操作:<基本操作的定义>}ADT抽象数据类型名5.实验源代码//(1)写出抽象数据类型的定义,即数据对象、数据关系、基本操作//原创 2021-03-13 12:15:49 · 8389 阅读 · 0 评论 -
线性表
1.A=A并B思路:1.从线性表LB中依次取得每个数据元素;GetElem(LB, i)→e2.依值在线性表LA中进行查访;LocateElem(LA, e, equal( ) )3. 若不存在,则插入之。ListInsert(LA, n+1, e)算法实现:void union(List &La, List Lb){ // 将所有在线性表Lb中但不在La中的数据元素插入到La中La_len = ListLength(La);Lb_len = ListLength(Lb);原创 2021-03-12 16:42:33 · 651 阅读 · 0 评论