- 博客(15)
- 收藏
- 关注
原创 邻接表及广度优先遍历
邻接表是由多条链表组成的数组。数组脚标代表每个结点,每条链表中的数据代表与该节点相连接的结点。图示:邻接表的广度优先遍历和图的广度优先遍历一样,但邻接表对各节点相连接的结点进行了压缩存储,访问相连接的结点时更快捷。 从一个结点顺着链表找到所有相连接的结点并保存,接着从和它相连接的结点中编号从小到大开始跟着链表遍历。同样要借助数组标记是否被访问,重复访问则不在保存。这里要采用循环队列的帮助。为重复访问且被访问的结点存入队中,然后依次出队顺着该结点的链表遍历,和树的广度遍历相似。直接上代码,若不理解,请跟着代码
2022-06-01 11:58:16 4239
原创 图的深度和广度遍历
图是一种较为复杂的数据结构,它是一种非线性的数据结构,表示多对多的关系。树和线性表都是一种特殊的图。这里就简单的介绍图的深度和广度优先遍历。深度优先遍历即从一个节点找到和它相连接的最小节点后,又继续找最小节点相连接的最小节点,代码中使用了递归,为了防止重复找到,还会采用另一个数组来记录各节点是否被访问过。原理图: 代码:广度优先遍历:从一个结点找到和它连接的所有节点并保存,接着从和它相邻的节点中编号从小到大开始遍历。同样要借助数组标记是否被访问,重复访问则不在保存。这里要采用循环队列的帮助。为重复访问
2022-06-01 11:15:41 2054
原创 哈夫曼树的建立编码解码
代码展示#include <stdio.h>#include <malloc.h>#include <string.h>#define Max 1024typedef struct HTNode{ int weight; char data; int parent,lchild,rchild;}*HufumanTree;typedef struct count{ char ch; int cent ;}*Count;typedef.
2022-05-29 22:49:30 152
原创 二叉树的构造及遍历
由于二叉树的每个结点具有一定的先后顺序,其作用是很大的。关于二叉树的构造这里是结合队列来完成的。首先分配一个指针队列,使用指针队列是由于其先进先出的特点,这些指针的类型是和二叉树结点的类型是一致的,用于保存结点的地址。当我们逐个扫描数据时,将数据与两个指针域构造成一个结点,队列每出队一个,就读取两个数据(将这两个数据作为出队那个数据的左右Child),并将这两个数据的地址传入队列中,等待出队迎接它们各自的Children。如图:代码步骤创建二叉树结点//二叉树结点 typedef str
2022-05-24 21:32:38 232
原创 压缩矩阵的转置C语言
压缩矩阵就是将存在数据的坐标及数据保留下来,为0的地方就不记录。所以每个完整存储数据的空间又包括三个小空间(行坐标,列坐标,数据)。由许多个存储行坐标,列坐标,数据的空间便构成了压缩矩阵。在转置过程中先扫描一边压缩矩阵,记录好每个列坐标相等的个数(用于计算转置过后所在起始行数,具体请结合图示理解)。再次扫描开始转置,如图中扫描到的第一个数据中的 j = 0,0对应的起始行数是第一行,交换行坐标,列坐标进行填充,起始行数+1;因为该行已存储了数据。继续扫描到 j = 2,2对应第3行,交换行坐标,列坐标进行填
2022-05-20 21:03:31 141 1
原创 二维数组及及矩阵的相乘
二维数组若不直接固定,则采用指针的方式来分配,这样可以根据你的需求来建立m*n的数组;在采用指针时,取用双指针来建立二维数组,如int**。根据矩阵相乘的定义,采用循环将两者相乘,具体请看代码。#include <stdio.h>#include <malloc.h>#include <stdlib.h>#define ROWS 4#define COLUMNS 5//二维数组的第一种分配方式 typedef struct TwoDarray{ i
2022-05-20 10:41:03 371 1
原创 C语言循环队列
循环队列是由数组来实现的,也是先进先出的规则。通过头脚标和尾脚标来实现对数据的删除和插入。在循环时为了区分队列是队满还是队空,我这里采用的是浪费一个空间使得尾脚标永远追不上头脚标指向的值,当尾脚标与头脚标中间只差一个空间判断为满,当头脚标追上头脚标的时队空。代码实现,具体理解请跟着代码画图。#include <stdio.h>#include <malloc.h>#define Max 5typedef struct CircleIntQueue{ int
2022-05-17 21:11:08 1065
原创 C语言链队列
链队列是由一个指向头结点和一个指向尾结点的两个指针及链表组成的。遵循数据先进先出的特点,这就意味着它只能从头结点处出队,从尾结点插入。使得删除和插入大大节省了时间,时间复杂度为O(1)。代码#include <stdio.h>#include <malloc.h>typedef struct LinkNode{ int data; struct LinkNode *next;}LinkNodePtr; typedef struct LinkQueu.
2022-05-17 20:56:44 434
原创 递归的应用——汉诺塔
汉诺塔问题是一个典型的递归问题。初略的将其移动看成三步。第一步,将n-1个移动到辅助木桩中;第二步,将第n个木桩移到目标木桩;第三部,将那n-1个移到目标桩上去;至于如何移动那n-1个那就去先搞n-2个;不断推锅存入栈中,直到走到可以执行的那一步,再弹栈依次执行回来;具体代码...
2022-05-12 14:03:18 143
原创 数据结构C代码——栈以及应用
栈的实现可以用指针和数组来实现,也可以用脚标作指针的功能。这里我们先用脚标来实现。定义结构体:typedef struct CharStack{ int top;//栈顶的脚标 int data[STACK_MAX_SIZE];//用于存储数据的空间}*CharStackPtr;栈的初始化CharStackPtr charStackInit(){ CharStackPtr tempStack = (CharStackPtr)malloc(sizeof(struct CharSta
2022-05-10 22:13:39 487
原创 多项相加的学习
将两个多项式的幂从小到大输入(本次代码只支持多项式的幂从小到大的相加)难点就是要考虑好相加的多种情形,以及结点的连接和释放。将多项式数字化typedef struct LinkNode{ int coefficient; int exponent; struct LinkNode *next;}*LinkList,*NodePtr;链表的初始化LinkList initLinkList(){ NodePtr tempHeader = (NodePtr)malloc(s
2022-05-06 22:33:25 390 1
原创 静态链表的学习
静态链表不同于单链表的有:静态链表所分配的存储数据的空间是相邻的,这个空间就像是数组空间,不同的是每个小空间内不止存有有数据,而且还有数字,这里的数字就作为访问数组内下一个小空间的脚标,起到了类似指针的作用;静态链表不仅包括了数组的空间,还分配了一个数组大小和存储数据的数组大小相同的空间,用于0和1标记存储数据的空间是否已经被使用。同时静态链表的空间在使用过程中大小不变。而单链表每个空间不一定相邻,采用的是指针连接,且空间可变具体理解请结合图示,代码一起理解:图示:存储数据的结构体ty
2022-05-03 22:35:47 1055 1
原创 双向链表的学习
双向链表的插入,查找,删除。双向链表相较于单项链表的好处是能够快捷的操作前驱和后继,氪金可退不过缺点是分配的空间更大。双向链表的结点由指向前面结点指针、数据和指向后面结点的指针组成双向链表 链表的插入插入代码void insertElement(DLNodePtr paraHeader, char paraChar, int paraPosition){ DLNodePtr p,q,r; p = paraHeader; for(int i=0;i < par..
2022-05-03 21:23:20 663 1
翻译 单链表的学习
本节内容主要学习了单链表的创建,添加,插入,删除。通俗的讲链表就是由一片片区域相互连接而形成可以储存数据的表,每个区域都由数据域和指针域构成。图示:链表的创建typedef struct LinkList{ char data; struct LinkList *next;}LNode,*LinkList,*NodePtr;//定义链表结构体LinkList initLinkList{ NodePtr tempterList = (NodePtr)mall.
2022-04-29 12:16:55 129
翻译 线性表学习记录
关于线性表我在这里就不做过多的坠诉,作为一个新手小白在这里分享记录我的学习过程。由于不太熟悉就先从理解跟着老师的代码走吧!老师的代码#include <stdio.h>#include <malloc.h>#define LIST_MAX_LENGTH 10/** *Linear list of integers.The key is date */typedef struct SequentialList{ int actualLength;
2022-04-26 00:43:58 81 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人