自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 单源最短路径【东北大学oj数据结构12-2/3】C++

vi​(i=1,2,...k) 表示与 u 相邻的结点的 ID,ci​ 表示连接 u 和 vi​(从 u 到 vi​)的有向边的权重。对于给定的加权图 G=(V,E),找到从源到每个结点的最短路径。对于每个结点 u,打印从结点 0 到 u 的最短路径上边的总权重。对于每个结点,分别在一行中打印其 ID 和距离(使用空格分隔)。在第一行中,给出了一个整数 n,表示 G 中的结点数。u 是目标结点的 ID,k 表示它的度数。G 中的结点从 0 ~ n-1 编号。注意,需按结点 ID 的顺序打印。

2025-01-03 20:34:33 362

原创 最小生成树【东北大学oj数据结构12-1】C++

对于给定的加权图 G=(V,E),找到 G 的最小生成树 (MST) 并打印属于 MST 的边的总权重。在接下来的 n 行中,给出了 n×n 的邻接矩阵 A 用于表示图G。其中,a[ij]​表示连接顶点 i 和顶点 j 的边的权重。0≤a[ij]​≤2,000(当a[ij]​≠-1的时候)如果 i 和 j 之间没有边,则 a[ij]​ = -1。在第一行中,给出一个整数 n,表示 G 中的顶点数。打印 G 的最小生成树的总权重。

2025-01-03 20:32:51 521

原创 连通分量分解【东北大学oj数据结构11-4】C++

n 是 SNS 中的用户数,m 是 SNS 中的关系数。在接下来的 m 行中,给出了关系。每个关系由两个整数 s 和 t 给出,表示 s 和 t 是朋友(并且彼此可达)。在接下来的 q 行中,分别给出了 q 个查询。每个查询由两个整数 s 和 t 组成,由空格字符分隔。编写一个程序,读取 SNS(社交网络服务)中的关系,并判断给定的用户对通过网络是否彼此可达。对于每个查询,如果 t 可以通过社交网络从 s 到达,则打印“yes”,否则打印“no”。在下一行中,给出了查询的数量 q。

2024-12-26 17:22:13 613

原创 BFS【东北大学oj数据结构11-3】C++

对于给定的有向图 G = (V, E),编写一个程序来找出从顶点 1 到每个顶点的最短距离 d(路径上的最小边数)。每个顶点从 1 到 n 编号。对于不能从顶点 1 到达的顶点,输出 -1。在一行上输出每个顶点的 id 和 d。id 是顶点的编号,d 是顶点 1 到该顶点的距离。按顶点编号顺序输出。第一行给出了 G 中的顶点数 n。u 是顶点的编号,k 是 u 的度数,v1​v2​…vk​是与 u 相邻的顶点的编号。

2024-12-26 17:20:14 606

原创 DFS【东北大学oj数据结构11-2】C++

如果顶点 v 有未搜索的顶点则递归搜索直至 v 的最后一条边。在搜索了 v 的所有边之后,搜索继续返回到找到 v 时经过的边。搜索从原来的起点开始,直到找到所有可达的顶点,如果有未发现的顶点,则以编号最小的顶点作为新的起点继续搜索。u 是顶点的编号,k 是 u 的度数,v1​v2​…vk​ 是与 u 相邻的顶点的编号。在DFS的过程中,如果要访问的顶点有多个,则选择顶点数最小的那个。id是顶点的编号,d是顶点的发现时间,f是顶点的完成时间。f[v]:记录v的邻接表被检查完成时的时间。

2024-12-26 17:18:20 504

原创 图【东北大学oj数据结构11-1】C++

邻接表表示由 ∣V∣个数组 Adj[∣V∣]组成列表,第 i 个数组 Adj[i] 存储顶点集中第 i 个顶点的相关信息。对于每个 u∈V,邻接列表 Adj[u]包含所有顶点 v,使得存在边 (u,v)∈E。也就是说,Adj[u]由 G 中与 u 相邻的所有顶点组成。邻接矩阵表示法由一个大小为∣V∣×∣V∣矩阵组成。有两种标准方式来表示图 G=(V,E) (其中V顶点的集合, E是边的集合),分别是:邻接表表示和邻接矩阵表示。其中 u 是顶点 ID,k 表示它的度数,vi 是与 u 相邻的顶点的 ID。

2024-12-26 17:16:09 586

原创 最优二叉搜索树【东北大学oj数据结构10-4】C++

给定一个序列 K=k1​,k2​,...,kn​,其中 n 个不同的键按排序顺序 ,我们希望构造一个二叉搜索树。一些搜索可能针对不在 K 中的值,因此我们还有 n+1 个虚拟键 d0​,d1​,d2​,...,dn​ 表示不在 K 中的值。编写一个程序,计算通过给定 pi​ 获得的最优二叉搜索树上的搜索操作的期望值,搜索将针对 ki​ 和 qi​,搜索将对应于 di​。最优二叉搜索树是由 n 个键和 n+1 个虚拟键构造的二叉搜索树,以最小化搜索操作的成本期望值。第一行,给出一个整数 n,表示键的数量。

2024-12-23 20:50:50 1004

原创 最长公共子序列【东北大学oj数据结构10-3】C++

而序列 {b,c,b,a} ( X 和 Y 都有这个序列)的长度是 4, 又没有长度大于或等于 5 的公共子序列,所以序列 {b,c,b,a} 是 X 和 Y 的最长公共子序列。对于给定两个序列 X 和 Y , 序列 Z 是 X 和 Y 的公共子序列是指如果 Z 同时是 X 和 Y 的子序列。例如:如果 X = {a, b, c, b, d, a, b} 和 Y = {b, d, c, a, b, a} ,那么序列 {b, c, a} 是 X 和 Y 的一个公共子序列。1≤X和Y的长度≤1000。

2024-12-23 20:46:41 786

原创 矩阵链乘法【东北大学oj数据结构10-2】C++

在第一行中,给出了一个整数 n。在接下来的 n 行中,矩阵 Mi (i=1...n) 的维度由两个整数 r 和 c 给出,分别表示 Mi 的行数和列数。矩阵链乘法问题的目标是找到最有效的方法来乘以给定的 n 个矩阵 M1,M2,M3,...,Mn。编写一个程序,读取 Mi 的维度,并找到最小标量乘法以计算最大链链乘法 M1M2...Mn。在一行中打印最小数量的标量乘法。

2024-12-22 23:08:07 584

原创 斐波那契数【东北大学oj数据结构10-1】C++

编写一个程序,打印给定整数 n 的第 n 个斐波那契数。在一行中打印第 n 个斐波那契数。

2024-12-22 23:04:39 593

原创 堆排序【东北大学oj数据结构9-4】C++

堆排序是一种基于堆的数据结构的排序,是一种快速排序算法,可以在输入数组中实现排序处理(内存高效)。堆排序可以实现如下:else// sortheapSize--另一方面,堆排序频繁地交换远处的元素,导致对非连续元素的大量随机访问。现在给你 N 个元素的序列 A,你要找到它的一个排列,使得它是一个最大堆,且当把它变成排好序的序列时,伪代码第25行的maxHeapify中交换的总次数尽可能最大。

2024-12-18 21:39:33 634

原创 优先队列【东北大学oj数据结构9-3】C++

创建一个程序,为优先级队列 S 插入 (S, k) 和提取 Max (S)。这里,队列的元素是一个整数,它本身被视为一个键。多条指令被赋予优先级队列 S。每条指令都以插入 k、提取或结束的形式在一行中给出。其中 k 表示要插入的整数。extractMax(S):从S中取出S中key最大的元素并返回其值。对于每个提取命令,在一行输出从优先级队列 S 中提取的值。insert(S, k):将元素k插入集合S。指令数不超过2,000,000。end 指令标志着输入的结束。

2024-12-18 21:36:32 523

原创 最大堆【东北大学oj数据结构9-2】C++

满足“节点键值小于或等于其父键值”的最大堆条件的堆称为最大堆。在最大堆中,最大的元素存储在根中,以某个节点为根的子树的节点的键值小于或等于该子树的根的键值。maxHeapify (A, i) 将 A [i] 的值降低到最大堆叶,以便以节点 i 为根的子树是最大堆。输入的第一行给出了堆的大小 H。然后,从节点号1到H依次给出代表堆中节点值的H个整数,用空格隔开。max-按照从节点号1到H的顺序在一行打印堆中节点的值。−2,000,000,000 ≤ 节点值 ≤ 2,000,000,000。

2024-12-18 21:35:11 563

原创 完全二叉树【东北大学oj数据结构9-1】C++

如果表示二叉堆的数组为A,二叉堆的大小(元素个数)为H,则二叉堆的元素存储在A[1...H]中。树根的下标为1,给定节点的下标i,其父父节点(i)、左孩子left(i)和右孩子right(i)分别为⌊i / 2⌋。另外,将二叉树除最低层以外的所有层都完全填充,从左到最后节点依次填充最低层的树,也称为(粗略地)完全二叉树。然后,按照节点的顺序给出表示堆中节点的值(keys)的H个整数,用空格隔开。创建一个程序,读取由完全二叉树表示的二叉堆,并以如下格式输出二叉堆的每个节点的信息。请注意,每一行都以空格结尾。

2024-12-18 21:32:45 725

原创 Treap树堆【东北大学oj数据结构8-4】C++

二叉搜索树会因为插入的数据的值可能变得不平衡,搜索/插入/删除操作的效率变得低效。例如,如果依次插入 n 个升序的数据,则树将看起来像一个列表,其高度将为 n,并且查询时间变得很长。我们可以通过为二叉树的每个节点分配随机选择的priority并对节点进行排序来维护平衡二叉树:这里假设每个节点的key和priority都是唯一的。进一步,对于每条打印指令,将中序遍历算法和前序遍历算法得到的key的排列输出到一行。在接下来的 m 行,指令以插入 k p、查找 k、删除 k 或打印的形式给出。

2024-12-16 20:57:37 1055

原创 二叉搜索树Ⅲ【东北大学oj数据结构8-3】C++

如果 z 有两个孩子,则将 z 的下一个节点 y 的key复制到 z 的key并删除 y。这里z的下一个节点是中间前向巡逻中z之后得到的节点。如果 z 只有一个孩子,将 z 的父节点的子节点更改为 z 的子节点,将 z 的子节点的父节点更改为 z 的父节点,然后从树中删除 z。进一步,对于每条打印指令,将中序遍历算法和先序遍历算法得到的key的排列输出到一行。在下一个 m 行,以插入 k、查找 k、删除 k 或打印的形式在一行上给出指令。如果 z 没有孩子,则删除 z 的父母 p 的孩子(即 z)。

2024-12-16 19:07:14 1023

原创 二叉搜索树Ⅱ【东北大学oj数据结构8-2】C++

在接下来的 m 行中,给出了由 insert k、find k 或 print 表示的操作。另外,对于每个打印操作,分别打印一行中序树遍历和先序树遍历得到的key列表。对于每个 find k 操作,如果 T 有一个包含 k 的节点,则打印“yes”,否则打印“no”。编写一个程序,通过将查找操作添加到二叉搜索树 T 对二叉搜索树 T 执行以下操作:二叉搜索树 I。打印:分别通过中序树遍历和先序树遍历打印二叉搜索树的键。find k:报告T是否有包含k的节点。插入k:将一个包含k的节点插入到T中。

2024-12-16 19:05:36 647

原创 二叉搜索树Ⅰ【东北大学oj数据结构8-1】C++

二叉搜索树应该以这样的方式实现,即二叉搜索树的属性在通过插入和删除修改后继续保持。除了关键字段和卫星数据之外,每个节点还包含字段 left、right 和 p,分别指向对应于其左子节点、右子节点和父节点的节点。该过程以将 z 插入到树中的适当位置的方式修改 T 和 z 的某些字段。例如,属于包含 80 的节点的左子树的节点的键值小于或等于 80,属于右子树的节点的键值大于或等于 80。二叉搜索树是一种基本的搜索树。print:分别通过中序树遍历和预序树遍历打印二叉搜索树的键值。二叉搜索树中的键都是不同的。

2024-12-12 15:09:58 894

原创 有根树【东北大学oj数据结构7-1】C语言

创建一个程序,为给定的有根树 T 的每个节点 u 输出以下信息。u的节点号u的父节点号u的深度u的节点类型(根、内部节点或叶)u的孩子名单这里我们假设给定的树有n个节点,每个节点都分配了一个从0到n-1的数字。

2024-12-11 16:52:19 527

原创 分区【东北大学oj数据结构6-2】C语言

在 QuickSort(A, p, r) 中,首先,过程 Partition(A, p, r) 将数组 A[p..r] 分成两个子数组 A[p..q-1] 和 A[q+1 ..r] 使得 A[p..q-1] 的每个元素都小于或等于A[q],反过来,A[q+1..r]的每个元素都大于或等于A[q]。在运行过程中,两个子数组 A[p..q-1] 和 A[q+1..r] 通过递归调用QuickSort(A,p,q-1)和QuickSort(A,q+ 1,r)。被选为分区主元的元素应用[ ]表示。

2024-12-11 16:49:08 404

原创 树的重构【东北大学oj数据结构7-4】C++

编写一个程序,分别读取二叉树上前序树遍历和中序树遍历得到的两个节点序列,并在二叉树上打印后序树遍历得到的节点序列。将后序树遍历获得的节点 ID 序列打印成一行。在相邻 ID 之间放置一个空格字符。每个节点都有一个从 1 到 n 的唯一 ID。请注意,根并不总是对应于 1。在第二行中,通过前序树遍历获得的节点 ID 序列以空格字符分隔给出。在第二行中,通过中序树遍历获得的节点 ID 序列以空格字符分隔给出。第一行给出了一个整数 n,它是二叉树中的节点数。

2024-12-11 16:43:20 716

原创 树的遍历【东北大学oj数据结构7-3】C++

id 是节点的ID,left 是左孩子的ID,right 是右孩子的ID。如果节点没有左(右)子节点,左(右)用-1表示。在第 5 行打印“Postorder”,在第 6 行打印通过后序遍历获得的节点 ID 列表。在第 3 行打印“Inorder”,在第 4 行打印通过中序遍历获得的节点 ID 列表。在第一行,打印“Preorder”,在第二行,打印通过前序遍历获得的节点 ID 列表。这里,给定的二叉树由 n 个节点组成,每个节点都有一个从0到n-1的唯一ID。输入的第一行包括一个整数 n,即树的节点数。

2024-12-10 17:27:40 884

原创 二叉树【东北大学oj数据结构7-2】C++

id为当前节点的id,left为左子节点的id,右为右子节点的id。如果节点没有左(右)子节点,则用-1表示左(右)子节点。如果两个节点具有相同的父节点,则它们是兄弟。在这里,如果u和v有相同的父节点,我们说u是v的兄弟姐妹(反之亦然)。这里,给定的二叉树由n个节点组成,每个节点具有从0到n-1的唯一ID。树中节点的高度是从节点到叶子的最长简单向下路径上的边的数量。二叉树是具有根节点的树,其中每个节点最多具有两个子节点。输入的第一行包含一个整数n,即树的节点数。节点类型(根节点,内部节点或叶节点)

2024-12-10 15:47:50 889

原创 降低成本排序【东北大学oj数据结构6-4】C语言

N件重量为wi​(i=0,1,…,n−1)的行李排成一排。使用机械臂对这些行李进行分类。机器人手臂可以在一次操作中提起行李i 和行李 j并交换它们的位置,但代价是 wi​+wj​。您可以根据需要多次操作机器人手臂。整数 n 在第一行给出。在第二行,给出了 n 个整数wi​(i=0,1,…,n−1),用空格分隔。找出按重量升序排列给定包裹行的成本的最小总和。wi​ 是所有不同的值。在一行上输出最小值。

2024-12-02 22:51:02 401

原创 快速排序【东北大学oj数据结构6-3】C语言

一张牌由花色的一部分(S、H、C或D)和一个数字组成。您的程序还应该报告给定输入(实例)的输出稳定性。这里,“输出的稳定性”意味着:具有相同值的卡片以与它们在输入(实例)中相同的顺序出现在输出中。每张卡片在一行中给出,并由一对字符和一个整数表示,由单个空格分隔。在第一行,打印此输出的稳定性("Stable"或"Not stable")。这里,A 是一个数组,代表一副牌,并根据数字执行比较操作。在以下几行中,以与输入相同的方式打印排列好的卡片。第一行包含一个整数 n,即卡片的数量。输入中没有相同的卡片。

2024-12-02 22:47:20 555

原创 计数排序【东北大学oj数据结构6-1】C语言

计数排序可用于对数组中的元素进行排序,其中 n 个输入元素中的每一个都是 0 到 k 范围内的整数。计数排序的思想是,对于每个输入元素 x,将小于 x 的元素个数确定为 C[x]。此信息可用于将元素 x 直接放入其在输出数组 B 中的位置。必须修改此方案以处理多个元素具有相同值的情况。编写一个程序,根据计数排序对给定数组的元素进行升序排序。序列的两个连续元素应由空格字符分隔。输入的第一行包括一个整数 n,即序列中元素的数量。在第二行中,序列的 n 个元素由空格字符分隔。

2024-10-12 21:45:37 675

原创 逆序数【东北大学oj数据结构5-4】C语言

对于给定的序列A={a0​,a1​,…,an−1​},若二元组(i,j)满足ai​>aj​,i<j则称(i,j)为一个逆序。给定序列中逆序的数量称为该序列的逆序数。c变为逆序数,当我们选择右侧R[j]并放入合并后的数组时,左侧L[]中剩下的所有元素都大于R[j]对于给定的序列A,打印A的逆序数。由于冒泡排序的时间复杂度是O(n^2),所以我们要选择更好的排序方法。在第二行中,元素ai​(i=0,1,…在第一行中,给出了一个整数 n,即 A 中元素的数量。题目中给出提示,在排序中计算逆序数。

2024-10-11 22:30:09 734

原创 科赫曲线【东北大学oj数据结构5-3】C语言

打印 Koch 曲线的每个点(x,y)。你应该从点(0,0) 开始,它是第一条线段的端点,并以点 (100,0) 结束,以便你可以将科赫曲线绘制为一条完整的线。对新段 (p1,s)、(s,u)、(u,t)、(t,p2) 递归重复此过程。编写一个程序,读取整数 n, 并根据深度n的递归调用绘制 Koch 曲线。用与线段相同长度的等边三角形(s,u,t) 的两侧替换中间线段。你应该从(0,0),(100,0) 作为第一段开始。将给定的段(p1,p2)分成三个相等的段。koch 曲线是众所周知的一种曲线。

2024-10-10 22:35:57 468

原创 归并排序【东北大学oj数据结构5-2】C语言

在合并时,两个数组尾部添加最大值,即使一个数组完全遍历完毕,另一个数组仍然可以继续进行比较和合并,无需额外的边界检查。编写一个归并排序算法程序,由以下伪代码实现。您还应该报告 Merge 函数中的比较次数。sentinel是哨兵,放置一个特殊值,用于标识结束或边界,避免额外检查。在第一行,打印序列 S。两个连续的元素应该用空格字符分隔。在第一行中给出了 n。在第二行中,给出了 n 个整数。int的最大十进制是2^31-1,10^9可以。0 ≤ S 中的一个元素 ≤ 10^9。在第二行,打印比较次数。

2024-10-09 21:01:56 548

原创 穷举搜索【东北大学oj数据结构5-1】C语言

编写一个程序,读取由 n 个元素组成的序列 A 和一个整数 M,如果可以通过在 A 中的元素相加得到 M,则输出“yes”,否则输出“no”。一个元素只能使用一次。在第一行中给出了 n。在第二行中,给出了 n 个整数。在第三行中给出了 q。然后,在第四行,给出 q 个(Mi​)。给出序列 A 和 q 个问题,其中每个问题都包含Mi​。对于每个Mi​打印"yes"或"no"。1 ≤ A 中的元素 ≤ 2000。

2024-10-09 20:54:54 525

原创 分配【东北大学oj数据结构4-4】C语言

你需要从皮带输送机按顺序(i=0,1,…,n−1)得到 n 包wi​ kg的包裹。你应该将所有包裹装载到 k 辆具有共同最大载荷P 的卡车上。每辆卡车都可以从皮带输送机上装载连续的包裹(大于或等于零),序列中的包裹总重量不得超过最大载荷P。在第一行中,两个整数 n 和 k 由空格字符分隔。在接下来的n行中,分别给出了wi​。编写一个程序,读取 n、k和 wi​,并报告最大负载 P 的最小值以装载所有包裹。在一行中打印 P 的最小值。

2024-10-08 22:30:45 574

原创 字典【东北大学oj数据结构4-3】C++

find str:如果字典包含str,则打印'yes',否则打印'no'。insert str:在字典中插入一个字符串str。在接下来的 n 行中,n 条指令以上述格式给出。为一行中的每个查找指令打印"yes"或"no"。字符串由“A”、“C”、“G”或“T”组成。在第一行 n 中,给出了指令的数量。1 ≤ 字符串长度 ≤ 12。

2024-10-08 22:26:11 455 2

原创 二分查找【东北大学oj数据结构4-2】C语言

给定一个由 n 个整数组成的序列 S 和一个由不同的 q 个整数组成的序列 T。编写一个程序,输出 C,即既在序列 T 中也在集合 S 中的整数个数。在第一行中给出了 n。在第二行中,给出了 n 个整数。在第三行中给出了 q。然后,在第四行,给出 q 个整数。0 ≤ S 中的一个元素 ≤10^9。0 ≤ T 中的一个元素 ≤10^9。S中的元素按升序排列。

2024-10-07 20:46:03 334

原创 线性查找【东北大学oj数据结构4-1】C语言

给定一个由 n 个整数组成的序列 S 和一个由不同的 q 个整数组成的序列 T。编写一个程序,输出 C,即既在序列 T 中也在集合 S 中的整数个数。在第一行中给出了 n。在第二行中,给出了 n 个整数。在第三行中给出了 q。然后,在第四行,给出 q 个整数。0 ≤ S 中的一个元素 ≤10^9。0 ≤ T 中的一个元素 ≤10^9。注意计算数量是没有重复数字的。

2024-10-07 20:44:22 212

原创 横截面图上的区域【东北大学oj数据结构3-4】C++

你的任务是模拟洪水灾害。对于给定的横截面图,给出淹没部分的面积。假设该地区不断地下雨,而从该地区溢出的水正在落入两侧的海中。例如,对于上面的横截面图,雨水将产生洪水,其面积分别为 4、2、1、19 和 9。

2024-10-07 20:41:48 624

原创 双向链表【东北大学oj数据结构3-3】C语言

当给定 delete、deleteFirst 或 deleteLast 指令时,列表中有一个或多个元素。delete x:从链表中删除第一个键为 x 的元素。如果不存在这样的元素,则什么都不做。接下来的 n 行给出了n个指令。完成所有指令后,依次输出链表中的键。insert x:在链表的开头添加一个键为 x 的元素。deleteFirst:删除列表中的第一个元素。deleteLast:删除列表中的最后一个元素。指令过程中链表的元素个数不超过$10^6$个。实现接受以下指令的双向链表。删除指令不超过20条。

2024-10-07 20:34:27 370

原创 队列【东北大学oj数据结构3-2】C语言

队列中有 n 个进程。每个进程都有namei​和timei​。循环调度程序为每个进程提供一个时间段(一个时隙),如果到那时它没有完成,则中断该进程。进程被恢复并移动到队列的末尾,然后调度程序处理队列中的下一个进程。例如,我们有以下队列,时间段长度为 100 毫秒。在接下来的 n 行中,给出了 n 个进程的名称和时间。首先,进程 A 被处理 100 毫秒,然后进程移动到队列末尾,剩余时间(50 毫秒)。在第一行中,进程数 n 和时隙 q 由单个空格分隔。对于每个进程,按顺序打印其名称和进程完成的时间。

2024-10-07 20:31:56 570

原创 栈-逆波兰表达法【东北大学oj数据结构3-1】C语言

逆波兰表示法是一种表示法,其中每个运算符都在其所有操作数的后面出现。例如,表达式(1+2)×(5+4)可以表示为逆波兰表达式1 2 + 5 4 + ×。逆波兰表示法的优点之一是它没有括号。编写一个程序,读取逆波兰表示法中的表达式并打印计算结果。逆波兰表示法中的表达式是使用栈计算的。要计算表达式,程序应按顺序读取符号。如果符号是操作数,则应将相应的值压入栈。另一方面,如果符号是一个运算符,程序应该从堆栈中弹出两个元素,执行相应的操作,然后将结果压入栈。程序应重复此操作。

2024-10-07 20:27:51 297

原创 希尔排序【东北大学oj数据结构2-4】C语言

的序列G,对于G中每一个元素,依次执行insertionSort(A, n, g)。因此,其也被称为“缩小增量排序”。大量研究表明,不同的G序列的选取对于排序的性能有着显著的影响。G序列由希尔排序增量序列的一部分逆序得到,比较著名的增量序列有Shell增量序列、Hibbard增量序列、Knuth增量序列、Gonnet增量序列、Sedgewick增量序列等。本题要求你使用Knuth增量序列编写这个排序程序,其递推公式为:填写上面的伪代码中的?来完成这个程序。

2024-10-07 20:24:43 480

原创 稳定的排序【东北大学oj数据结构2-3】C语言

这里,输出稳定就意味着:具有相同值的卡片以与它们在输入中相同的顺序出现在输出中。您的任务是编写一个程序,分别使用冒泡排序算法和选择排序算法按值对给定的一组卡片进行排序。在第一行,打印由冒泡排序算法提供的排列好的卡片。在第三行,打印由选择排序算法提供的排列好的卡片。两张连续的卡片用空格字符隔开。在第四行,打印此输出的稳定性(“Stable”或“Not stable”)。在第二行,打印此输出的稳定性(“Stable”或“Not stable”)。第一行包含一个整数 N(1 ≤ N ≤ 36),即卡片的数量。

2024-10-07 20:20:11 350

空空如也

空空如也

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

TA关注的人

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