自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(124)
  • 收藏
  • 关注

原创 【头歌】构建哈夫曼树及编码

设二叉树具有n个带权值的叶子结点,从根结点到每个叶子结点都有一个路径长度。从根结点到各个叶子结点的路径长度与相应结点权值的乘积的和称为该二叉树的带权路径长度,记作:其中,wi为第i个叶子结点的权值,li为第i个叶子结点的路径长度。例如:以上二叉树的带权路径长度值:给定一组具有确定权值的叶子结点,可以构造出许多形状的二叉树,把其中具有最小带权路径长度的二叉树称为哈夫曼树。

2023-08-26 18:32:24 2448 1

原创 【头歌】二叉树的二叉链表存储及基本操作

中序遍历序列的特点:若已知二叉树的根结点值,以该值为界,将中序遍历序列分为两部分,前半部分为左子树的中序遍历序列,后半部分为右子树的中序遍历序列。中序遍历的非递归和前序遍历的非递归很相似,只是前序遍历是根-左-右,而中序遍历左-根-右,也就是说,中序遍历是:先遇到根节点不访问,而是直接压入栈,当左子树节点为空时,取出左子树节点,并访问左子树节点的右子树。③ 先序遍历右子树。因为二叉树的定义就是递归定义,因此采用递归的方法去实现二叉树的三种遍历,所谓先序、中序、后序,区别在于访问根结点的顺序。

2023-07-19 23:30:47 1866

原创 【头歌】二叉树的顺序存储及基本操作

从数据结构角度看,树包含n(n≥0)个结点,当n=0时,称为空树;非空树的定义如下:有且仅有一个结点d0∈D,它对于关系R来说没有前驱结点,结点d0称作树的根结点。除根结点d0外,D中的每个结点有且仅有一个前驱结点,但可以有多个后继结点。D中可以有多个终端结点。【例】 有一棵树T=(D,R),其中  D={A,B,C,D,E,F,G,H},  R={r}  r={,,,,,,} 画出其逻辑结构图。

2023-05-11 17:10:41 2610 1

原创 【头歌】数组-稀疏矩阵的转置

接下来依次扫描A.data,先判断A.data[0],取出A.data[0].j用变量k保存(k=A.data[0].j),表示该三元组是A中第k列第一个非零元,则其在B.data中的位置为q=y[k],接着将该三元组存入B.data[q]中,然后y[k]++,以便将第k列的下一个非零元存放到B.data下一个位置;其中,x[i]表示A中第i列的非零元的个数,y[i]初始值表示A中第i列第一个非零元在B.data中的位置。稀疏矩阵是指非零元素的个数远远少于总的元素个数,且非零元素的分布没有规律。

2023-05-11 16:50:31 1443

原创 【头歌】串的运算及应用

串的模式匹配设有两个字符串S和T,设S为主串,T为子串,也称为模式。在主串S中查找与模式T相匹配的子串,如果匹配成功,确定相匹配的子串中的第一个字符在主串S中出现的位置。第2关中实现的字符串匹配的简单算法在实际应用系统中效率低,而 KMP 算法可以实现高效的字符串匹配。在右侧编辑器中补充代码,完成StrIndex_BF函数,以实现串的模式匹配的 BF 算法。在右侧编辑器中补充代码,完成GetNext函数,以实现串的模式匹配的 KMP 算法。本关任务:实现字符串的模式匹配的简单算法(BF算法)。

2023-02-08 17:20:52 3024

原创 【头歌】循环队列及链队列的基本操作

define MAX_QSIZE 5 // 最大队列长度+1struct SqQueue{ QElemType *base;// 初始化的动态分配存储空间 int front;// 头指针,若队列不空,指向队列头元素 int rear;// 尾指针,若队列不空,指向队列尾元素的下一个位置};使用顺序队列时会出现“假溢出现象”,为了能够充分地使用数组中的存储空间,可以把数组的前端和后端连接起来,形成一个环形的表,即把存储队列元素的表从逻辑上看成一个环。这个环形的表叫做循环队列。

2023-01-30 20:34:31 3997

原创 【头歌】链栈的基本操作及应用

另外,在算法的开始和结束时,栈都应该是空的,所以匹配到最后还要判断栈是否为空,若空,则说明匹配成功,返回1。其中表达式只包含三种括号,花括号{}、中括号[]、圆括号(),即它仅由 (、)、[、]、{、}六个字符组成。预期输出: 栈中元素依次为:12 47 5 8 6 92 45 63 75 38 4 29 弹出的栈顶元素 e=29 栈空否:0(1:空 0:否) 栈顶元素 e=4 栈的长度为11 清空栈后,栈空否:1(1:空 0:否)// 若栈不空,则用e返回S的栈顶元素,并返回OK;

2023-01-30 20:25:46 3430

原创 【头歌】顺序栈的基本操作及应用

define STACK_INIT_SIZE 100 //存储空间初始分配量#define STACKINCREMENT 10 //存储空间分配增量// 定义栈元素类型为整型//栈的基址即栈底指针//栈顶指针//当前分配的空间}SqStack;

2023-01-30 20:07:33 3869

原创 【头歌】汉诺塔(Hanoi)的递归算法

因此,依据上法,可解决n -1个盘子从A杆移到B杆(第一步)或从B杆移到C杆(第三步)问题。现在,问题由移动n个盘子的操作转化为移动n-2个盘子的操作。3、2,直到移动1个盘的操作,而移动一个盘的操作是可以直接完成的。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。(1)以C盘为中介,从A杆将1至n-1号盘移至B杆;

2023-01-28 20:47:19 2574

原创 【头歌】求解n皇后问题

用数组int q[N]表示棋盘状态,例如q[1]=1表示第1行皇后放在第1列。皇后k在第k行第q[k]列:(k,q[k]) 对于(i,j)位置上的皇后,是否与已放好的皇后(k,q[k])(1≤k≤i-1)有冲突呢?q[k]== j 时,两皇后在同一列上;abs(k-i)==abs(q[k]-j) 时,两皇后在同一斜线上。两种情况两皇后都可相互攻击。本关任务:在n×n的方格棋盘上,放置n个皇后,要求每个皇后不同行、不同列、不同左右对角线。当n=6时,如下图所示是6皇后问题的一个解。开始你的任务吧,祝你成功!

2023-01-28 20:35:57 802 4

原创 【头歌】函数的递归调用

要计算数组a从起始序号start到结束序号end之间数组元素的最大值: (1)如果数组a起始序号start等于结束序号end,那么返回值为此序号数组元素值a[start]。要计算数组a从起始序号start到结束序号end之间数组元素的和: (1)如果数组a起始序号start等于结束序号end,那么返回值为此序号数组元素值a[start]。(2)如果数组a起始序号start小于结束序号end,那么返回值为a[start]与数组a从start+1到end的之间数组元素的和。根据提示,在右侧编辑器补充代码。

2023-01-28 20:34:30 3236

原创 【头歌】双向链表的基本操作

在双链表中p结点之后插入s结点的操作步骤如下: ① 将结点s的next域指向结点p的下一个结点: s->next=p->next;在双链表中删除p结点(其前驱结点为pre)的操作:   ① 若p不是尾结点,则将其后继结点的prior域指向pre结点: p->next->prior=pre ② 将pre结点的next域改为指向p结点的后继结点: pre->next=p->next。在带头结点的双向链表中,通常头结点的数据域可以不存储任何信息,尾结点的next域置为NULL。

2023-01-25 23:05:58 1980

原创 【头歌】循环单链表的基本操作

an),LB=(b1,b2,…算法思想: 先找到两个链表的尾,并分别由指针p、q指向它们,然后将第一个链表的尾结点与第二个表的第一个结点链接起来,并修改第二个表的尾结点,使它的链域指向第一个表的头结点。将尾结点的next域用一个特殊值NULL(空指针,不指向任何结点,只起标志作用)表示,这样的单链表为非循环单链表,通常所说的单链表都是指这种类型的单链表。=L作为循环条件,当p==L时循环结束,此时p回过来指向头结点,所以p应该初始化指向第一个数据结点而不是头结点,否则循环内的语句不会执行。

2023-01-25 23:01:54 3617

原创 【头歌】有序链表的插入删除操作

用一个循环控制ppre和pcur向后移动,当ppre指向的结点值和pcur指向的结点值相等,那么ppre的指向的位置保持不动,将pcur的指向先传递给pdel,然后pcur向后移一个位置,再将ppre指向的结点作为pcur指向的结点的前驱,这两个结点再次保持相邻,最后释放pdel指向结点的空间,达到删除多余结点的效果。//带头结点的单链表L,其结点存储的数据是递增有序的,将e插入L,并保持该单链表的有序性。//带头结点的单链表L,其结点存储的数据是递增有序的,将e插入L,并保持该单链表的有序性。

2023-01-24 21:47:08 2616

原创 【头歌】单链表的排序操作

设置两个指针,一个是当前指针,一个是尾指针,当前的指针指向头节点,将尾指针指向最后一个节点,在当前的指针不等于尾指针时是一次循环,第一次将当前一个节点的值与下一个节点的值相比较,直到下一个节点和尾指针相等(即为空),结束本次循环,最后当前的指针赋给尾指针,当前指针重新指向头结点,再两两相比较,把最大(或最小)的数放在最后。然后在剩下的单链表当中再找值最小的结点与第二个位置结点的数据交换,如此循环到倒数第二个位置结点的数据和最后一个结点数据比较为止。开始你的任务吧,祝你成功!开始你的任务吧,祝你成功!

2023-01-24 21:35:42 2263

原创 【头歌】单链表的基本操作

由于单链表中每个结点的存储地址是存放在其前趋结点的指针域中的,而第一个结点无前趋,头指针L指向第一个结点,对于整个单链表的读取必须从头指针开始,同时,由于单链表中最后一个结点的指针域为“空”(NULL),没有直接后继元素,对于整个单链表的读取必须在尾结点结束。要在带头结点的单链表L中删除第i个结点,则同样要先找到第i-1个结点,使p指向第i-1个结点,使q指向第i个结点,然后令第i-1个结点的指针域指向第i+1个结点,而后删除q指向的第i个结点并释放结点空间。= NULL时,才能进行删除结点的操作。

2023-01-23 20:26:12 13138 1

原创 【头歌】顺序表的基本操作

时,在函数体内不需要改变主调函数中的实参变量的值,只需读取主调函数中的实参变量的值,因此函数形参定义为变量,采用值传递。,i-1上的结点,依次后移到位置n,n-1,…关于逆置,有一种非常暴力的解决方法,就是单独开辟一个同等大小的顺序表,然后新表从前往后遍历,同时原表从后往前遍历,依次赋值,最后得到的就是逆置后的顺序表。,ai−1,ai,ai+1,…顺序表的就地逆置,只需让顺序表中的数据元素头尾依次交换即可,即交换第一个元素和最后一个元素,第二个和倒数第二个,依此类推,这种方法的空间复杂度为O(1)。

2023-01-23 20:02:29 11988 2

原创 洛谷P1618 三连击(升级版)next_permutation

分析:既然三个数ai,bi,ci比例是a:b:c。或者是ai==a,bi==b,ci==c。

2022-10-31 23:01:18 314

原创 C++ next_permutation(全排列算法)

这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,作用:将区间内数组修改为下一个全排列(按照字典序),如果成功return 1 如果当前是最后一个则return 0。组合数学中经常用到排列,这里介绍一个计算序列全排列的函数:next_permutation(start,end),严格来讲,就是对于当前序列pn,他的下一个序列pn+1满足:不存在另外的序列pm,使pn

2022-10-29 15:24:22 348

原创 C++ 数组去重

unique()是C++标准库函数里面的函数,其功能是去除相邻的重复元素(只保留一个),所以使用前需要对数组进行排序,对于长度为n的数组a,unique(a,a+n) - a返回的是去重后的数组长度,不过,它并没有将重复的元素删除,有很多文章说的是,unique去重的过程是将重复的元素移到容器的后面去,实际上这种说法并不正确,应该是把不重复的元素移到前面来。共一行,包含一个整数表示数组中不同数的个数。第二行包含 n 个整数,表示数组 a。sort 函数统计 前后比较。第一行包含一个整数 n。

2022-10-27 20:50:40 3598

原创 C++ substr实现截取字符串

s.substr(n,length)//表示从字符串n的位置开始截取length长度的字符。字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。s.substr(n)//表示从字符串n的位置开始截取到最后。和数字 22,该函数将返回左旋转 22 位得到的结果。输入字符串长度 [0,1000][0,1000]。请定义一个函数实现字符串左旋转操作的功能。

2022-10-27 18:10:32 1660

原创 C++快速实现去掉数组中重复元素

unique函数通常和erase函数一起使用,来达到删除重复元素的目的。(注:此处的删除是真正的删除,即从容器中去除重复的元素,容器的长度也发生了变换;而单纯的使用unique函数的话,容器的长度并没有发生变化,只是元素的位置发生了变化)关于erase函数的用法

2022-10-25 22:12:59 6723

原创 【Acwing】蓝桥杯 1209. 带分数 (对next_permutation的解释)

注意特征:带分数中,数字 1∼9 分别出现且只出现一次(不包含 0)。100100 可以表示为带分数的形式:100=3+69258/714。输出输入数字用数码 1∼9 不重复不遗漏地组成带分数表示的全部种数。类似这样的带分数,100 有 11 种表示法。还可以表示为:100=82+3546/197。

2022-10-16 10:04:49 584

原创 16.1 【动态数组】利用动态数组计算两个长度为n的向量的和

【问题描述】编写程序,计算两个长度为n的向量的和。要求用动态数组实现。【输入形式】首先输入向量的长度n(整型),其次按行分别输入两个向量各元素的值(整型)

2022-05-31 23:21:27 596

原创 15.4【数组和结构体】输出指定排序方式的指定序号的疫情数据。

【问题描述】小科要去多个城市出差,他查阅大数据统计信息,请你帮他分析疫情实时数据,输出指定排序方式的指定序号的疫情数据。

2022-05-31 22:58:33 451 1

原创 15.3【数组和结构体编程】在给定的字符串的指定字符前面插入标记字符,若指定字符连续出现则需要把连续的字符压缩为1个字符加出现的次数,指定字符和标记字符均从键盘输入。

【问题描述】小科最近在研究字符串压缩标记问题,他想在给定的字符串的指定字符前面插入标记字符,若指定字符连续出现则需要把连续的字符压缩为1个字符加出现的次数,指定字符和标记字符均从键盘输入。请你帮他解决这个需求吧。

2022-05-31 22:54:25 252

原创 15.2【数组和结构体编程】从键盘输入字符串,要求输出字符串中最长连续字母的个数。连续方式包括从小到大和从大到小两种,字母区分大小写

【问题描述】小科特别喜欢编程比赛,但他在参加C语言程序设计大赛时候被一道题目难住了。题目要求从键盘输入字符串,要求输出字符串中最长连续字母的个数。连续方式包括从小到大和从大到小两种,字母区分大小写,请你帮助小科吧!

2022-05-31 22:07:21 445 2

原创 15.1【数组和结构体编程】如何对数组中的元素排序后平移一组元素

如何对一个数组的元素排序后平移元素

2022-05-31 21:22:46 322

原创 14.5【结构体指针编程】小科同学学习了数组和结构体,认真进行编程练习,顺利完成了老师布置的20道课外编程题后,他想起了科比20年的职业生涯数据。

【问题描述】小科同学学习了数组,认真进行编程练习,顺利完成了老师布置的20道课外编程题后,他想起了科比20年的职业生涯数据,查阅数据如下:No Season Age TRB AST PTS 1 1996-97 18 1.9 1.3 7.6 2 1997-98 19 3.1 2.5 15.4 3 1998-99 20 5.3 3.8 19.9 4 199.

2022-05-27 15:58:06 664

原创 14.4【结构体指针编程】请编写函数计算返回平均分输出,并把低于等于平均分的学生数据通过结构体指针保存输出。

【问题描述】学生的记录由姓名和成绩组成,在主函数中输入4名学生的数据,请编写函数计算返回平均分输出,并把低于等于平均分的学生数据通过结构体指针保存输出。要求:1、使用结构体:typedef struct Student{ char name[20]; int score;}Stu;2、要求必须使用子函数:float StructAvg(Stu *a,Stu *b,int n,int *m)3、要在主函数中输出。【输入形式】依次输入4名学生的姓名和分数...

2022-05-27 15:51:32 417

原创 14.3【结构体指针编程】请编写函数实现把输入的指定分数范围内的学生通过通过结构体指针保存数据输出。

【问题描述】学生的记录由姓名和成绩组成且在主函数中通过结构体数组初始化,无需输入。请编写函数实现把输入的指定分数范围内的学生通过结构体指针保存数据并输出。要求:1、使用结构体:typedef struct Student{ char name[20]; int score;}Stu;2、给定原始12位学生数据:{ "HC105",85},{"HC103",76},{"HC102",69},{"HC104",85}, {"HC101",96},{"HC...

2022-05-27 15:40:26 425

原创 14.2【结构体指针编程】请编写函数实现把最高分的学生通过结构体指针保存数据并输出。

【问题描述】学生的记录由姓名和成绩组成且在主函数中通过结构体数组初始化,不要输入。请编写函数实现把最高分的学生通过结构体指针保存数据并输出。要求:1、使用结构体:struct Student{ char name[10]; int score;};2、请按下面给定数据给结构体数组的12位学生初始化:{ "HC105",85},{"HC103",76},{"HC102",98},{"HC104",85}, {"HC101",99},{"HC107",72},...

2022-05-27 15:38:06 529

原创 14.1 【结构体编程】学生的记录由姓名和成绩组成,在主函数中用结构体数组存储4名学生的数据,请编写函数按分数的高低降序排列输出学生的姓名和分数。

【问题描述】学生的记录由姓名和成绩组成,在主函数中循环输入4名学生的数据并用结构体数组存储,请编写函数StructSort,按分数的高低降序排列输出学生的姓名和分数。要求:使用结构体:struct Student{ char name[10]; int score;};使用子函数:void StructSort(struct Student stu[],int n)【输入形式】依次输入4名学生的姓名和分数【输出形式】按分数降序输出学生信息...

2022-05-27 15:33:34 566

原创 13.1【结构体】请你设计一个结构体实现对教师的工号、姓名、教授课程进行描述,创建该类型的结构体变量A,并从键盘录入数据进行赋值。

请你设计一个结构体实现对教师的工号、姓名、教授课程进行描述,创建该类型的结构体变量A,并从键盘录入数据进行赋值。请完成下面操作:1、输出结构体变量A的信息2、从A复制B,并在自定义函数Update()中更新B,修改姓名为KOBE,课程为C++程序设计3、在主函数中输出结构体变量B的信息以下是以多种方法实现//未修改版#include<stdio.h>#include<string.h>struct Teacher{ int sno; char.

2022-05-18 15:21:42 1008

原创 12.3【指针编程】编写一个函数,利用指针将输入的多个字符串按长度升序排序

【问题描述】编写一个函数,利用指针将输入的多个字符串按长度升序排序void StrSort(char *p[N],int n)【输入形式】循环输入四个字符串。每输入完一个按回车。【输出形式】输出排序后的四个字符串。【样例输入】HUKOBEBRYANTCCZU【样例输出】HUKOBECCZUBRYANT#include<stdio.h>#define N 100#include<string.h>v

2022-05-08 09:44:38 1107 2

原创 12.2【指针编程】编写一个函数,利用指针将输入的多个字符串按大小升序排序

【问题描述】编写一个函数,利用指针将输入的多个字符串按大小升序排序void StrSort(char *p[N],int n)【输入形式】循环输入四个字符串。每输入完一个按回车。【输出形式】输出按字符串大小排序后的四个字符串。【样例输入】HUKOBEBRYANTCCZU【样例输出】BRYANTCCZUHUKOBE#include<stdio.h>#define N 100#include<string.h

2022-05-07 00:00:00 895

原创 12.1【指针编程】编写一个函数,利用指针实现对只包含字母和*号的字符串处理。将字符串中的开头连续的*号全部移到字符串的尾部

【问题描述】编写一个函数,利用指针实现对只包含字母和*号的字符串处理。将字符串中的开头连续的*号全部移到字符串的尾部要求使用子函数:char *StrDel(char *s)【输入形式】输入一个包含字母和*号的字符串,且开头是若干个*【输出形式】输出处理后字符串【样例输入】*****st***ring【样例输出】st***ring*****#include<stdio.h>#define N 100#include<string.h&g

2022-05-03 14:12:03 1068

原创 11.3【指针编程】 编写一个函数,利用指针在字符串s中的指定位置pos处(这里插入的位置是从1开始,不是下标。)插入字符串。插入的位置和内容是从键盘输入

【问题描述】编写一个函数,利用指针在字符串s中的指定位置pos处(这里插入的位置是从1开始,不是下标)插入字符串。插入的位置和内容是从键盘输入要求:子函数 char *InsertStr(char *s,int pos,char *t)【输入形式】输入主串s,输入插入的子串t,输入插入位置pos。【输出形式】输出插入后字符串【样例输入】输入:abcdeKOBE2【样例输出】aKOBEbcde#include<stdio.h>#inclu..

2022-05-03 14:08:59 1078

原创 11.2【指针编程】编写一个函数,对字符串部分字符降序排列。

【问题描述】编写一个函数,对长度为6个字符的字符串,除首、尾字符外,将其余字符按ASCII码降序排列。要求:1、不在子函数中输出。2、子函数名自己定义,利用指针传字符串。【输入形式】输入6个字符的字符串【输出形式】输出除首、尾字符外,将其余字符按ASCII码降序的排列【样例输入】ZABCDE【样例输出】ZDCBAE【样例说明】【评分标准】看子函数实现和输出结果给分。#include<stdio.h>#include<string

2022-05-03 14:07:53 721

原创 11.1 【指针编程】编写一个函数,利用指针实现对只包含字母和*号的字符串处理。将字符串中的尾部连续的*号全部删除

【问题描述】编写一个函数,利用指针实现对只包含字母和*号的字符串处理。将字符串中的尾部连续的*号全部删除要求使用子函数:char *StrDel(char *s)【输入形式】输入一个包含字母和*号的字符串,且尾部是若干个*【输出形式】输出处理后字符串【样例输入】*****st***ring*****【样例输出】*****st***ring【样例说明】【评分标准】#include<stdio.h>#define N 100#include<

2022-05-03 14:06:53 1262

在VMware Workstation上安装Deepin

在VMware Workstation上安装Deepin,详细内容步骤文档

2023-07-19

数据结构复习资料自用版本

青岛大学-王卓老师数据结构与算法复习资料

2023-02-08

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除