![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
数据结构与算法
折翊
这个作者很懒,什么都没留下…
展开
-
栈与队列算法设计:(3)八皇后问题
目录1.题目2.题目分析3.参考代码4.测试结果八皇后问题的解,共92个。十皇后问题的解,共724个。1.题目 八皇后问题是19世纪著名的数学家高斯于1850年提出的,问题是:在8X8的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列和同一斜线上。设计算法实现八皇后问题的求解。2.题目分析 1.为了解决八皇后问题,我们这里使用栈和递归的结合。 首先,我们构建出一个8X8的棋盘,这里选择二维数组保存每个格子,并且所有格子的值初始化为0。接着,我们从棋盘的第一原创 2020-08-07 23:32:10 · 1998 阅读 · 1 评论 -
栈与队列算法设计:(2)括号匹配
目录1.题目2.题目分析3.参考代码4.测试结果1.题目 假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”以及花括号”{“和”}“,且这三种括号可按任意的次序嵌套使用,请设计算法判断给定的表达式所包含的括号是否能正确配对。2.题目分析 1.首先,我们获得用户输入的表达式,同时判断左括号和右括号的数量是否相等,如果不相等直接返回匹配失败。其中左括号包括”(“、“[”、“{”,右括号包括“)”、“]”、“}”。BOOL CountMatch(char* Stri原创 2020-08-07 21:36:47 · 997 阅读 · 0 评论 -
栈与队列算法设计:(1)迷宫问题
目录1.题目2.题目分析 算法分析 算法实现3.参考代码4.测试结果1.题目 迷宫问题的求解是实验心理学中的一个经典问题,心理学家把一只老鼠从一个无顶盖的大盒子的入口处赶进迷宫,迷宫中设置很多隔墙,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口处放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口。设计算法实现迷宫求解。2.题目分析 算法分析 1.这里我们使用的是栈来解决迷宫问题。 对于迷宫问题,我们常规的思维是——试错,即先随便找一条路,一直走下去,直到走到尽头,如果无法抵达出口,原创 2020-08-06 23:15:03 · 3462 阅读 · 0 评论 -
数据结构与算法2-2 栈与队列之队列
目录1.队列的概念 (1)队列的定义 (2)队列的特点 (3)队列的存储结构2.队列的基本操作 (1)顺序队 ①顺序队的定义 ②顺序队的状态 (2)链队1.队列的概念 (1)队列的定义 队列简称队,也是一种操作受限的线性表,它只允许在一端进行插入操作,在另一端进行删除操作的线性表。其中允许插入(也称入队,进队)的一端称为队尾(Rear),允许删除(也称出队)的一端称为队头(Front)。 (2)队列的特点 如下图所示,有一个有5个元素的队列,入队的顺序为a1、a2、a3、a4、a5,出队的原创 2020-08-02 00:00:16 · 184 阅读 · 0 评论 -
数据结构与算法2-1 栈与队列之栈
目录1.栈的概念 (1)栈的定义 (2)栈的特点 (3)栈的存储结构2.栈的基本操作 (1)顺序栈 ①顺序栈的定义 ②顺序栈的状态 ③顺序栈的入栈操作 ④顺序栈的出栈操作 (2)链栈 ①链栈的定义 ②链栈的状态 ③链栈的入栈操作 ④链栈的出栈操作 (3)两种栈的性能比较3.参考代码 (1)顺序栈 测试结果 (2)链栈 测试结果1.栈的概念 (1)栈的定义 栈是一种只能在一端进行插入或删除操作的线性表。其中允许进行插入和删除操作的一端被称为栈顶(Top)。栈顶由一个称为栈顶指针的位置指原创 2020-07-31 23:56:19 · 448 阅读 · 0 评论 -
线性表算法设计:(4)字符分类
目录1.题目2.题目分析1.题目 已知用户输入的一字符串中包含三类字符:字母,数字和其他字符。试编写算法,构造三个链表,使每个链表中只含有同一类字符。2.题目分析 怎么对字符进行分类呢?这似乎是这个问题的关键。我们知道,每个字符,都有其对应的ASCII码值,其中字符0-9对应的ASCII码为48-57,字符a-z对应的ASCII码为65-90,A-Z对应的ASCII码值为97-122,...原创 2020-07-30 19:05:26 · 217 阅读 · 0 评论 -
线性表算法设计:(3)约瑟夫环
目录题目题目分析参考代码测试结果题目 约瑟夫(Josephus)环问题。 约瑟夫环是由古罗马的史学家约瑟夫提出来的,他参加并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达43天之后。在城市沦陷后,他和40名死硬的将士在附近的一个洞穴中避难。在那里,这些将士们表决说“要投降毋宁死”。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签,并且,作为洞穴中的两个幸存者之一,他说服了他原先的牺牲品一起投降了罗马。 约瑟原创 2020-07-29 23:28:01 · 516 阅读 · 0 评论 -
线性表算法设计:(2)顺序表与单链表的逆置
目录题目题目分析(1)顺序表(2)单链表参考代码测试结果题目 设计一个算法,实现顺序表和单链表的逆置。题目分析(1)顺序表 顺序表的逆置比较容易,我们只需将顺序表对称两个元素相互交换,即一个元素和最后一个元素,第二个元素和倒数第二个元素…即可实现顺序表的逆置。这里我们使用for循环,每循环一次,一对数据完成交换,循环次数为顺序表长度/2。(2)单链表 单链表的逆置比起顺序表复杂一些,这里我们采用的是三指针法。 首先,我们定义三个临时指针,分别指向单链表的前三个结点。接着,我们将v1原创 2020-07-28 20:04:05 · 2601 阅读 · 0 评论 -
线性表算法设计:(1)顺序表元素的循环移动
目录1.题目2.题目分析3.参考代码4.测试结果1.题目 设计一个算法,对于一个存储着若干元素的顺序表,根据用户输入的移动方向和位数,实现对顺序表元素的循环移动。2.题目分析1.假设我们获得用户输入的方向和位数分别为左和3位,表示我们要将4号元素及其之后的元素全部前移3位,同时前3号元素移至数组尾部且保持顺序不变。我们想到的是创建一个临时数组,用来保存我们的前三号元素。2.接着,我们将数组的其他元素依次前移3位。3.最后,我们把临时数组里保存的前三个元素复制到顺序表的后三个位置,完成我们的原创 2020-07-28 18:57:07 · 667 阅读 · 0 评论 -
数据结构与算法1-3 线性表之双链表
目录1.双链表的概念(1)结点(2)双链表2.双链表的操作(1)结点和头指针的定义(2)插入结点 ① 头插法 ② 尾插法 ③ 随机插入(3)查找结点(4)删除结点(5)遍历链表`3.参考代码1.双链表的概念(1)结点 在讲双链表的结构之前,我们先来思考一个问题。我们知道,单链表的结构,使得我们可以在堆中随时分配内存来满足我们的需要,且根据头指针的值,我们可以通过每个结点的指针域遍历整个链表。但是这样的遍历也存在一定的问题,即每个结点只包含指向下一结点的指针域,这就导致我们只能从前往后遍历链表,为了解原创 2020-07-26 22:26:56 · 436 阅读 · 1 评论 -
数据结构与算法1-2 线性表之单链表
目录1.单链表的概念(1)结点(2)单链表2.单链表的特点(1)带头结点的单链表(2)不带头结点的单链表3.参考代码(1)结点和头指针的定义(2)单链表的遍历(3)求单链表的表长(3)向单链表中插入结点 ① 头插法1.单链表的概念(1)结点 在链表结构中,构成链表的基本单位就是结点,每个结点结构体一般包括数据域和指针域。在数据域中,包含用户想要存储的每个单位的信息;指针域则是存储下一结点的指针,由此才能将若干结点连接成为链表。结点的结构一般如下所示: 图1.结点的结构图(2)单原创 2020-07-17 20:25:18 · 213 阅读 · 0 评论 -
数据结构与算法1-1 线性表之顺序表
数据结构与算法-01 线性表之顺序表1.顺序表的概念 顺序表,就是把若干个元素按照其逻辑顺序,依次存储到从指定的存储位置开始的一块连续的存储空间中。其中,线性表中的第一个元素的存储位置就是指定的存储位置,第i+1个元素的存储位置紧接在第i个元素的存储位置的后面,这样元素的存储方式就构成了顺序表。2.顺序表的特点3.参考代码(1)顺序表的初始化(2)顺序表的遍历(3)查找表中的元素(4)向表中增加元素(5)从表中删除元素...原创 2020-07-16 16:29:44 · 393 阅读 · 0 评论