自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 数据结构:n皇后问题

引入N叉树的数据结构,构建​​皇后问题的解空间树。排列长度​​为树的深度,据此判定递归的出口。初始状态将一维数组q置空,以行先序从第0行开始递归求解。遍历​​行每一列​​,若q中已有​​(即第​​列已经放置了皇后),则发生剪枝,继续遍历其他列;若q中没有​​,则​​,递归式进入​​行的遍历,直到数组q中已经赋满​​个列号,则进入递归出口进行判定局面的合理性(即每个行/列/斜线最多仅有1个皇后)。若局面合理,将该合理局面保存在二维数组result中,继续回溯探索其他合理局面;若局面不合理,同样回溯探索其他合理

2022-05-29 17:40:39 999

原创 数据结构:哈夫曼树(HuffmanTree)

哈夫曼树:给定N个权值作为N个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。定义结构体:typedef struct wordcnt{ //统计字符和对应的次数 char ch; int cnt = 0;}; typedef struct NumCount{ //统计次数的外部封装 Count c...

2022-05-29 17:12:06 1345

原创 6.1二叉树的构建与遍历

二叉树的建立与遍历操作(1) 二叉树的建立先序中序遍历建立二叉树:二叉树前序遍历序列中,第一个元素总是树的根节点的值。中序遍历序列中,左子树的节点的值位于根节点的值的左边,右子树的节点的值位于根节点的值的右边。递归解法:(1)如果前序遍历为空或中序遍历为空或节点个数小于等于0,返回NULL。(2)创建根节点。前序遍历的第一个数据就是根节点的数据,在中序遍历中找到根节点的位置,可分别得知左子树和右子树的前序和中序遍历序列,重建左右子树。中序后序遍历建立二叉树:二叉树中序遍历序列中,左子树

2022-05-24 22:45:01 321

原创 5.2压缩矩阵的转置

什么要对矩阵进行压缩存储呢?对于一个n*m的矩阵,我们一般会想到开一个n*m的二维数组来存储,这样计算操作都很方便模拟,但当一个矩阵很大时,这样对于空间的开销与浪费是很可怕的,尤其是当矩阵变成多维时。但我们往往不会在矩阵每一个位置都存有数据,很多矩阵元素其实是0,我们需要记录的只是那些非零元素,于是我们可以记录非零元素的位置与值,这样便可以大大减少空间上的浪费。矩阵转置为​矩阵的转置矩阵就是老师代码:#include ...

2022-05-20 09:45:02 97

原创 5.1: 二维数组与矩阵乘法

核心思想:矩阵C中的元素C[i][j]=矩阵A中的第i行与矩阵B中的第j列对应位置每个值的乘积之和。凡哥的代码:#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define ROWS 4#define COLUMNS 5/** * Two dimensional array. */typedef struct TwoDArray{ int rows; int colum

2022-05-20 09:29:47 61

原创 3.7循环队列

初始化:CircleIntQueuePtr initQueue() { CircleIntQueuePtr resultPtr = (CircleIntQueuePtr)malloc(sizeof(struct CircleIntQueue)); resultPtr->head = 0; resultPtr->tail = 0; return resultPtr;}入队:// 入队 void enqueue(CircleIntQueuePtr paraPtr, i

2022-05-17 22:11:13 54

原创 3.6链队列

.队列:只允许在一端进行插入,在另一端进行删除的线性表。链队列:使用链表实现的队列;具有队头指针和队尾指针,指示队列元素所在的位置。链队列特性:只能队尾插入元素、在队头删除元素。 先进先出(First In First Out)的线性表,先进入的元素出队,后进入的元素才能出队。优点:相比普通的队列,元素出队时无需移动大量元素,只需移动头指针。 可动态分配空间,不需要预先分配大量存储空间。 适合处理用户排队等待的情况。缺点:需要为表中的逻辑关系增加额外的存储空间。时间复杂度

2022-05-17 22:04:30 487

原创 3.5汉诺塔问题

汉诺塔:相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如图1)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上对于这样一个问题,任何人都不可能直接写出移动盘子的每一步,但我们可以利用下面的方法来解决。设移动盘子数为n,为了将这n个盘子从A杆移动到

2022-05-12 22:14:01 164

原创 3.4 累加的递归实现

递归:递归是一种解决问题的有效方法,在递归过程中,函数将自身作为子例程调用。简单说程序调用自身的编程技巧叫递归。递归的思想是把一个大型复杂问题层层转化为一个与原问题规模更小的问题,问题被拆解成子问题后,递归调用继续进行,直到子问题无需进一步递归就可以解决的地步为止。使用递归需要避免出现死循环,为了确保递归正确工作,递归程序应该包含2个属性:基本情况(bottom cases),基本情况用于保证程序调用及时返回,不在继续递归,保证了程序可终止。 递推关系(recurrentce relati

2022-05-12 22:04:43 199

原创 表达式求值

一、借鉴别的同学的代码:#include <stdio.h>#include <stdlib.h>#include <ctype.h> #define Maxsize 100 typedef int dataType; typedef struct Stack{ dataType *top; dataType *base; int stacksize;}sqstack; void create(sqstack *s){ s-&

2022-05-10 21:17:31 62

原创 栈和括号匹配

一、栈:栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。二、老师的代码#include <stdio.h>#include <malloc.h> #define STACK_M...

2022-05-10 21:12:17 254

原创 2 .5多项式相加

多项式加法运算步骤分析: 最开始,p1、p2分别指向两个多项式的第一个结点: p1所指向的指数5>p2指向的指数4,把这一项复制到结果多项式中,然后p1指针向后挪: p1指向的指数与p2指向的指数相等,那么系数相加后,再放入结果多项式中,然后p1、p2指针都向后挪老师代码:#include <stdio.h>#include <malloc.h>/** * Linked list of integers. The key is data. The key is

2022-05-06 20:33:29 84

原创 2.4静态链表

1.静态链表用数组描述的链表,即称为静态链表。在C语言中,静态链表的表现形式即为结构体数组,结构体变量包括数据域data和游标。优点:这种存储结构,仍需要预先分配一个较大的空间,但在作为线性表的插入和删除操作时不需移动元素,仅需修改指针,故仍具有链式存储结构的主要优点。2.构建结构体typedef struct StaticLinkedNode{ char data; int next;} *NodePtr; typedef struct StaticLinkedL

2022-05-03 20:40:15 59

原创 2.3双向链表

双向链表的定义上一节学习了单链表。今天学习双链表。单向链表特点:  1.我们可以轻松的到达下一个节点, 但是回到前一个节点是很难的.  2.只能从头遍历到尾或者从尾遍历到头(一般从头到尾)双向链表特点  1.每次在插入或删除某个节点时, 需要处理四个节点的引用, 而不是两个. 实现起来要困难一些  2.相对于单向链表, 必然占用内存空间更大一些.  3.既可以从头遍历到尾, 又可以从尾遍历到头双向链表的定义:  双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直

2022-05-03 15:48:29 61

原创 单链表---2.2

闵老师的代码:#include <stdio.h>#include <malloc.h>/** * Linked list of characters. The key is data. */typedef struct LinkNode{ char data; struct LinkNode *next;} LNode, *LinkList, *NodePtr;/** * Initialize the list with a header. * @r

2022-04-29 18:00:57 69

原创 数据结构c代码1:顺序表

线性表基本内容:线性表(List):由零个或多个数据元素组成的有限序列。 首先它是一个序列,也就是说元素之间是有个先来后到的,即元素之间是有顺序的。 若元素存在多个,则第一个元素无前驱,而最后一个元素无后继,其他元素都有且只有一个前驱和后继。 另外,线性表强调是有限的,事实上无论计算机发展到多强大,它所处理的元素都是有限的。线性表的顺序存储结构:顺序表概念:用一组地址连续的存储单元依次存储线性表的数据元素,这种存储结构的线性表称为顺序表。特点:逻辑上相邻的数据元素,物理次序也是相邻的。1

2022-04-27 09:38:09 77

空空如也

空空如也

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

TA关注的人

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