数据结构
文章平均质量分 65
Melody20210917
软件测试
展开
-
利用哈夫曼树实现文件压缩
实现原理:1.按照字符分析要压缩的文件得出结果(有哪些字符,每个字符出现的次数)。2.根据字符出现的次数构建哈夫曼树(得出字符的哈夫曼编码)。3.根据字符的哈夫曼编码进行转换、压缩,然后创建压缩文件。4.读取压缩文件,读出哈夫曼编码和字符的对照表。解压缩。数据结构的设计:1.保存字符次数和字符的数据结构struct _symbol{char charac原创 2017-02-27 10:51:49 · 6429 阅读 · 4 评论 -
实现单链表、栈、队列功能
1、单链表实现增、删、改、查、排序功能,定义一个空的头结点,头指针指向头结点,头结点的指针域保存首节点#include #include #include typedef struct Node{ int data; struct Node* pNext;}NODE,*PNODE;PNODE creat_list(void);void traverse_list(PNOD原创 2017-03-10 20:36:03 · 411 阅读 · 0 评论 -
双向链表
双向链表的实现前面总结了单链表的定义的基础上,现在开始着手实践实践双向链表。结构换个角度而言,双向链表是单向链表的扩展,如果从数据结构代码的定义上来看,双向链表需要维护三个数据内容:数据(data)、前指针(prev)和后指针(next)。与单向链表结构相比较,在程序代码中需要多维护一个prev指针域,双向链表如下图所示:链表的插入与删除示意图: 双向链表带来的好处原创 2017-03-12 14:17:47 · 256 阅读 · 0 评论 -
循环链表实现增、删、改、查等功能
循环链表有一个头指针指向头结点,如下图所示:头结点不保存数据,所以head->next中的节点中保存数据。代码实现:#include #include typedef struct node{//节点类型 int data;//保存数据 struct node* next;//指向下一个节点}Node;//typedef struct node Node;#原创 2017-05-24 15:22:06 · 584 阅读 · 0 评论 -
单链表是否有环问题
有很多种方式解决问题,我这里只说一种方法使用p、q两个指针,p每次向前走一步,q每次向前走两步,若在某时候p == q,则存在环,如图:代码实现:#include #include #define LEN 8typedef struct node{ char val; struct node *next;}*node_t;int has_loop2原创 2017-05-24 16:17:30 · 350 阅读 · 1 评论 -
基数排序和分组排序
我们先来讲一下其他排序的特点:冒泡排序:相邻两个数比较获得最大或者最小的数,剩下的再去排序最大最小的,每轮冒出一个数选择排序:从所有数中找出一个需要的数和固定位置交换,所有数都选择一次就所有数都有序排列插入排序:把第一个元素当成一个有序数组,然后依次把其他元素插入到这个有序数组中基数排序用到的是数组下标天然有序使用基数排序的缺点:1.占用大的内存2.数组中的原创 2017-06-02 16:29:05 · 313 阅读 · 0 评论 -
实现二叉树先序、中序、后序遍历
根节点:没有父节点的节点这里需要使用到递归先序:根->左->右中序:左->根->右后序:左->右->根代码实现:#include #include struct node{//结点类型 int data; struct node* left; struct node* right;};typedef struct node Node;Node* creat原创 2017-06-02 17:42:15 · 755 阅读 · 0 评论 -
哈夫曼树的创建
二叉树的路径和?所有叶子节点路径的总和。什么是哈夫曼树?路径和最短的二叉树如何构造最优二叉树,也就是哈夫曼树哈夫曼树的构建过程?1.给出一个数组,以每个元素为基础,创建一个叶子节点数组。2.从中找出权值最小的两个节点,构建一棵树。这棵树的权值等于两个节点权值之和。左子树等于权值最小的那个节点,右子树等于权值次小的那个节点。3.将该树的根放入节点数组中原创 2017-06-09 15:37:25 · 5323 阅读 · 0 评论