自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 huffman算法的代码实现(c语言)(小甲鱼的网课的代码实现)

我们知道计算机在传输数据时通常会将相应的数据转化位只有01的二进制,如果我们用相应的ascll的值来传输,我们消耗的传输空间一定会很大并且传输效率十分低下,而使用相应的huffman算法会极大的减小相应的传输数据。我们继续进行creat的函数,我们可以会发现我们用左右节点的变量来不断提出相应的节点并进行合成。我们先看main函数我们可以看到4个函数,从第一个到第四个相应的功能分别是创立相应的huffman树、得到相应的字符对应的01序列的表格、将字符串转化为相应的01序列和将01序列转换为相应的字符串。

2025-03-06 20:53:07 849

原创 线索二叉树的创立和遍历

1.什么是线索二叉树在的结点上加上线索的二叉树称为线索二叉树,对二叉树以某种遍历方式(如先序、中序、后序或层次等)进行遍历,使其变为线索二叉树的过程称为对二叉树进行线索化。[1]二叉树的遍历本质上是将一个复杂的转换为,使每个结点都有了唯一前驱和后继(第一个结点无前驱,最后一个结点无后继)。对于二叉树的一个结点,查找其左右子女是方便的,其前驱后继只有在遍历中得到。为了容易找到前驱和后继,有两种方法。一是在结点结构中增加向前和向后的指针,这种方法增加了存储开销,不可取;二是利用二叉树的空链指针。

2025-02-28 23:29:54 235

原创 二叉树的创立和遍历(c语言)

但是,二叉树中每个节点在这个序列中的直接前驱节点和直接后继节点是什么,二叉树的存储结构中并没有反映出来,只能在对。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。为了保留节点在某种遍历序列中直接前驱和直接后继的位置信息,可以利用二叉树的二叉链表存储结构中的那些空指针域来指示。,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。

2025-02-27 21:52:21 318

原创 8 queen

八皇后问题(英文:Eight queens),是由棋手马克斯·贝瑟尔于1848年提出的问题,是的典型案例。问题表述为:在8×8格的上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。认为有76种方案。1854年在的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。如果经过±90度、±180度旋转,和的摆法看成一类,共有12 [1]类。计算机发明后,有多种可以编程解决此问题。

2025-02-21 17:39:39 378

原创 汉诺塔问题

汉诺塔问题是一个经典的递归问题,源自一个古老的印度传说。在这个问题中,我们有三根柱子和一系列不同大小的圆盘,这些圆盘最初按大小顺序堆叠在一根柱子上。目标是将所有圆盘移动到另一根柱子上,遵循两个规则:一次只能移动一个圆盘,且在移动过程中较大的圆盘不能放在较小的圆盘上面。递归算法的基本思想是将问题分解成更小的子问题,直到达到最简单的情况。将顶部的n-1个圆盘从起始柱子移动到辅助柱子。将n-1个圆盘从辅助柱子移动到目标柱子代码呈现。将最大的圆盘从起始柱子移动到目标柱子。(1)什么是汉诺塔问题。

2025-02-21 14:52:19 229

原创 中缀表达式转后缀表达式(c语言)

如果字符是操作符,判断栈顶操作符的优先级: 如果栈为空或栈顶操作符优先级低于当前操作符,当前操作符入栈。否则,依次出栈并送入后缀表达式,直到栈为空或栈顶操作符优先级低于当前操作符,然后当前操作符入栈。然而,中缀表达式对于计算机处理并不友好,尤其是包含括号的情况。后缀表达式(逆波兰式)则更适合计算机处理,因为它不需要括号来表示操作符的优先级。:如果字符是右括号,依次出栈并送入后缀表达式,直到遇到左括号(左括号出栈但不送入后缀表达式)。:遍历完成后,将栈中剩余的操作符依次出栈并送入后缀表达式。

2025-02-18 23:45:26 336

原创 用顺序栈解决逆波兰表达式(c语言)

J・卢卡西维兹(J・ Lukasiewicz)于1929年首先提出的一种表达式的表示方法 [1]。后来,人们就把用这种表示法写出的表达式称作“逆波兰表达式”。逆波兰表达式把运算量写在前面,把算符写在后面。

2025-02-16 00:34:36 260

原创 通过顺序栈来实现二进制向十进制、八进制的转化(c语言)

堆栈又名栈(stack),它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。对于十进制比较简单没什么特别需要注意的,而对于8进制来说我们要两个栈一个用来存储原来数据一个用来存储改变后的数据。

2025-02-15 21:48:52 150

原创 用双向循环链表实现凯撒密码(c语言)

例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。中,恺撒密码(英语:Caesar cipher),或称恺撒加密、恺撒变换、变换加密,是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,我们用双向循环链表来存放26个字母,对字母进行移动时我们只需要移动链表的头节点即可。上向后(或向前)按照一个固定数目进行偏移后被替换成。

2025-02-13 15:51:17 152

原创 约瑟夫问题(通过循环链表问题进行解决)

据说著名犹太历史学家Josephus(弗拉维奥·约瑟夫斯)有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。在这段代码中我们先创立了结构体,然后我们在进行主函数时我们发现我们还需要对链表进行创立所以我们有creat函数,该函数我们对应的会创立相应的循环链表。

2025-02-11 19:25:33 309

原创 对循环链表的总结和代码说明

大概思路先看该链表是不是一个空链表,如果是空链表我们会为其开创相应的空间并对其进行赋值,如果不是一个空链表我们会先找该链表的最后的一个元素找到后将最后一个元素插入并且将其相应的指向地址改为第一个节点的地址。所以两者的思路基本是相似的而且循环链表的功能可能更完全,今天对循环链表进行一个小的总结。在这段代码中我们的实现基本和我们的思路讲解完全一样,值得注意的是在else中我们的倒数第二行应该是将traget的一个next就可以完成我们的目的。链表的初始化,对链表进行元素的插入,对链表进行元素的删除。

2025-02-10 16:29:38 168

原创 对顺序链表结构的总结

注意对于2.3两点是有不同的一个是最大的存储长度一个是现在的存储长度。最大存储长度在链表创建后一般是不会发生改变的,但是当前长度一定要随着data中元素的增添和缺失而不断发生改变的。首先,顺序链表的定义为一段地址连续的存储单元依次储存线性表的数据元素。对于该函数的思路是如果我们想要链表中对应的第i个元素进行返回那么我们对data中的第i-1的元素进行查找即可。1.储存空间的起始位置,此时data的储存位置就是顺序链表对应的储存空间的位置。1.GetElem(将链表中的一个位置的相应元素进行返回)

2025-02-04 22:59:00 162

原创 对安全项目2的方法2总结

我们此时可以看到该函数对应的esp和ebp即我们可以轻松的找到该函数对应的栈空间,而我们已知ebp后紧跟着的是返回地址这个在本题没什么用但getbuf的返回地址找寻同理,我们可以找到getbuf的返回地址这是十分重要的一个信息,而上一个文章显示出来了,我就不详细的解说了。如果不会修改getbuf的返回值为deadbeef,所以想到可以利用栈溢出的方式跳过val的赋值语句,直接运行第二个printf函数,而val的值也通过溢出覆盖为期望的deadbeef。最后,我承认这篇文章写的十分不详尽,我有罪。

2024-12-23 21:11:00 530

原创 对安全项目2的认识和安全项目1的完善(栈溢出攻击的学习总结)

(1)对原函数返回地址的改变,这是一个很重要的应用。我标注的两个寄存器一个是esp一个是ebp,这两个寄存器对应的是getbuf函数的栈顶和栈底,我的两个内存窗口上面的看到的是buf的地址,下面看到的是esp即对应的栈的地址。(当然还有一种思路,是通过改函数的返回地址将test函数中给val赋值的步骤跳过,并通过栈溢出改变val地址处的值来使val变为0xdeadbeef,这是一种十分巧妙的办法,可以得到相应的正确答案,但我认为这并不是题目想让我们做的,所以不详细的说明,只是作为一种plan b吧)

2024-12-18 15:30:14 1441 2

原创 对scu网安专业安全项目1的总结

findkey

2024-12-08 20:20:12 1029

原创 关于指针的总结

在指针的相加减时,指针对应的地址会移动相应的字节,而移动的字节是通过指针的类型决定的。(注意指针变量的大小永远是4或8个字节(具体是由编译器决定的),而加减的大小是可以不一样的,这是一个难点,我当时是没有立刻搞清楚的)。很多人可能并不知道函数还有指针,但是确实是有的,这个用的好像很少,我也不知道为什么会有这个东西,但我相信任何东西都有其存在的必要,也许只是我们的层次太低了。因为这是一个指针而且这个指针存储的数组的地址,像之前说明的&arr就是一个数组的地址。指针是一个变量,其存储的是另一个变量的内存地址。

2024-11-21 23:11:44 674 1

原创 简单的c语言和数据结构和算法的题目分享

我的想法是先找出最大的一项然后将这一项放在数组最后,然后让数组的最大项之后的每一项向前移动一项(就和数据结构中链式表删除其中的一项类似)。对于计算无序度的函数比较好些,就是用一位上的字母对应的阿斯克码值来进行直接的比较,而后用count来保留无序度的大小。(xdm我的代码在边界条件上没有进行特别细致的试验,如果有问题的话去改变数组的大小基本就可以了)我认为需要注意的是我的代码在进行循环是是从最后一项开始进行的因为这样可以保证无序度相同的dna在相对的顺序不会改变。之前在做题时看见了这样的题(图1)

2024-11-02 22:46:03 351

原创 故事的开始

xdm好,我是大一的一名学生刚开始接触计算机,希望可以在这里分享我的学习经验和学习成果。我会定期将自己学习的知识分享出来,希望和大家一起进步。我目前主要会分享c语言,网络空间安全和数据结构与算法等内容。

2024-10-30 23:56:55 142

空空如也

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

TA关注的人

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