数据结构
Pink_floyd
这个作者很懒,什么都没留下…
展开
-
数据结构—顺序表的基本功能实现
顺序表的基本功能实现线性表是数据结构的基础结构。数据结构+算法=程序,今天结束了C++的书本自学,扎进数据结构和算法的世界里。线性表分为顺序存储,链式存储,索引存储,散列存储等。顺序存储即顺序表,链式存储即链表。关于数据结构,最重要的是会画图,明白逻辑结构和物理结构。不急不燥,代码不是一气呵成的,需要长久的练习和耐心。下面是顺序表的实现代码:#include <iostrea...原创 2019-06-05 21:29:32 · 1457 阅读 · 0 评论 -
树的3种常用链表结构
树的3种常用链表结构双亲表示法typedef struct{ elemType data; int parent;}TNode;typedef struct{ TNode T[100]; int r,n; //根的位置和结点数}Tree;对应结构如下图:(显然很容易进行Parent操作,缺点是不容易进行Child操作)孩子表示法typedef struct C...原创 2019-07-01 14:52:35 · 1999 阅读 · 0 评论 -
哈夫曼树及哈夫曼编码的概念
一.哈夫曼树给定n个权值作为n个叶子结点,构造一棵二叉树,若该树的带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。话不多说,直接上图:求出三个二叉树的带权路径长度WPL,其中WPL( c )最短,c为哈夫曼树。那么如何构造哈夫曼树?哈夫曼给出了哈夫曼算法:①.根据给定的n个权值构造成...原创 2019-07-01 19:37:45 · 840 阅读 · 0 评论 -
二叉树的存储结构讨论
顺序存储结构按照顺序存储结构的定义,若约定用一组地址连续的存储单元由根结点开始,自上而下,从左至右为每个结点依次编号,则i个结点将顺序存储在0到i-1的数组中。我们可以发现,当为完全二叉树或满二叉树时,使用顺序存储结构可以依次为结点编号,比较适用;而当二叉树是普通二叉树时,我们则需要为空结点的编号信息置为0以标识为空,在最坏情况下,一个深度为k且只有k个结点的单支树则需要长度为2^k-1的一...原创 2019-06-26 16:09:46 · 182 阅读 · 0 评论 -
波兰式与逆波兰式
这里我看了一下,存两篇写的比较简单明了的博客。http://blog.sina.com.cn/s/blog_1745c5ec50102x3qu.htmlhttps://blog.csdn.net/edogawachia/article/details/79504702转载 2019-06-26 17:06:47 · 336 阅读 · 0 评论 -
遍历二叉树及其递归实现
遍历二叉树在二叉树的应用中,常常要求在树中查找具有某种特征的结点,或者对树中的结点逐一进行某种处理,这就出现了一个如何遍历二叉树的问题。我们希望能按照某条搜索路径访问树中的每一个结点,并使得每个结点有且仅被访问一次。“访问”的含义很多,可以是对结点作各种处理,如输出结点的信息等。遍历对线性结构来说是一个容易解决的问题,而对于二叉树则不然,由于二叉树是一种非线性结构,它的每个结点都可能有0~2...原创 2019-06-26 22:00:25 · 217 阅读 · 0 评论 -
哈夫曼树的搭建
哈夫曼树的实现先放代码,明天补充完整。今天心累的我…#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;/*哈夫曼树的应用----哈夫曼编码*//*根据哈夫曼算法:1.若给定n个权值的结点构造n棵二叉树, 其中n棵二叉树的根结点分别为这n个...原创 2019-07-02 20:53:10 · 169 阅读 · 0 评论 -
线索二叉树的讨论
线索二叉树前面谈到了遍历二叉树,遍历二叉树是以一定规则(先序,中序或后序)将二叉树中的结点排列成一个线性序列。这实际上是对非线性化结构进行线性化操作,使每个结点(除第一个和最后一个外)在这些序列中有且仅有一个前驱或后继。但当以二叉链表作为存储结构时,只能找到结点左右孩子的信息,并不能得到结点的前驱和后继信息。一种比较简单的方法当然是在每个结点结构中再加入两个指针域,前驱指针域保存其前驱...原创 2019-06-27 18:50:15 · 199 阅读 · 0 评论 -
哈夫曼编码和译码的实现
哈夫曼编码和译码的实现#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;/*哈夫曼树的应用----哈夫曼编码*///哈夫曼树的结点结构typedef struct HuffmanTree{ in...原创 2019-07-04 18:10:10 · 2035 阅读 · 0 评论 -
中序遍历二叉树的非递归实现(利用栈)
先待补充文字,以下是完整代码#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;#define STACK_INIT_SIZE 100 //栈的初始化容量 #define STACK_INC_SIZE 10 //栈的分配增量 typed...原创 2019-06-29 21:14:35 · 2818 阅读 · 1 评论 -
二叉树的定义及重要特性
二叉树二叉树:每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。满二叉树:即每一层上的结点数都是最大结点数。 若其深度为k,则有2^k-1个结点。完全二叉树:若把二叉树的结点从根结点开始,由上到下,从左到右依次编号。完全二叉树即为满二叉树从其最大的编号结点依次往前出栈任意次后的结果。下图为它们的示例图:由二叉树的定义和其特殊形...原创 2019-06-21 21:58:25 · 1556 阅读 · 1 评论 -
汉诺塔的理解问题
转载 汉诺塔的理解问题 2018年08月30日 11:32:01 程二有点独 阅读数:318 ...转载 2019-06-10 20:17:46 · 176 阅读 · 0 评论 -
数据结构—单链表的基本功能实现
C++实现线性表的增删改查1.创建线性表:a.该线性表可以由用户输入创建大小b.由用户输入数据c.打印线性表2.依次为线性表添加 "增删改查" 的功能:a.输入要增加的数据,增加完后遍历打印b.输入要删除的数据,删除完后遍历打印c.输入要修改的数据,修改完后遍历打印d.输入要查找的数据,查找并打印出来源代码如下:#include <iostream>usi...原创 2019-04-09 20:18:20 · 469 阅读 · 0 评论 -
数据结构—循环队列的实现
数据结构—循环队列和顺序栈相类似,我们在队列的顺序存储结构中,附设两个指针front和rear分别指示队列首尾元素的位置。约定:初始化建空队列时,令front=rear=0。每当插入队尾元素时,尾指针加1;每当删除队首元素时,头指针加1。因此,在非空队列中,头指针始终指向队列首元素,尾指针始终指向队列尾元素的下一个位置。假设队列的最大空间为5,当我们删除又插入后,头指针或尾指针会越界,而此时...原创 2019-06-12 16:51:42 · 440 阅读 · 0 评论 -
数据结构—树的基本概念名词
树的基本概念名词根结点只有一个:A子树:除根结点外,每个子结点可以分为多个不相交的子树。例如:{B,E,F,F,K,L},{C,G},{D,H,I,J,M}都是根结点A的子树;{E,K,L},{F}又是它们的根结点B的子树。度:结点拥有的子树数称为结点的度。例如:A的度为3,B的度为2,C的度为1,F的度为0。树的度是树内各结点的度的最大值。叶子结点/终端结点:度为0的结点。例如:K,L...原创 2019-06-12 20:17:27 · 1230 阅读 · 0 评论 -
单链表结构实现和循环链表及双向链表的定义
单链表基础结构实现这里我并没有写增删改查的功能,参考了数据结构严蔚敏版一书。然后我发现按他的那段初始化伪代码实现后,结点倒过来了,不过并不影响道理。重点需要搞清楚单链表的结构,C好久没用去学面向对象了,结构体和malloc我有点忘记了,码在这里以后忘了当参考。#include <iostream>#include <cstdio>#include <cs...原创 2019-06-06 16:42:40 · 933 阅读 · 0 评论 -
数据结构—顺序栈的基本功能实现
数据结构—顺序栈的基本功能实现栈是仅限在表尾进行插入或删除操作的线性表。栈中有栈底(表头端)和栈顶(表尾端),栈又被称为后进先出线性表(LIFO结构)。当top=base时,栈为空。每当一个元素进栈时,top指针加1;每当一个元素出栈时,栈顶元素减1。即非空栈中的栈顶指针始终在栈顶元素的下一个位置上。下面是顺序栈的代码实现#include <iostream>#incl...原创 2019-06-06 18:38:22 · 199 阅读 · 0 评论 -
栈的应用实例1—数制转换
栈的应用实例—数制转换先复习一下数电和组成原理课程中所学过的进制转换问题。常见的进制有十进制(D),八进制(O),十六进制(H),二进制(B)。它们之间的部分转换如下:这里有一个例子转换为八进制的结果为2504,可以看出正好与运算过程的值逆序。因此我们可以将运算过程中得到的八进制数的各位顺序进制,然后按出栈序列打印输出即为所求八进制数。我们这里可以用上次的博客里写的程序来完成。...原创 2019-06-06 20:17:57 · 1025 阅读 · 0 评论 -
栈的应用实例2—括号匹配的检验
栈的应用实例2—括号匹配的检验假设表达式中允许包含两种括号:圆括号和方括号,其嵌套的顺序随意。例如:( [ ] ( ) ) 或 [ ( [ ] [ ] ) ] 等为正确的格式;而 [ ( ] )或( ( ) ] ) 等均为不正确的格式。那么如何写一个程序可以检验括号匹配是否通过呢?通过人工检验,不难发现我们若把它放到计算机,用计算机的思维去代入问题,则是这样的一种解决方法:①.输入一...原创 2019-06-07 17:45:52 · 1217 阅读 · 0 评论 -
栈的应用实例3—迷宫求解问题
栈的应用实例3—迷宫求解问题用栈求解迷宫问题:#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;#define STACK_INIT_SIZE 1000 //栈的初始化容量 #define STACK_INC_SIZE 100 //栈的...原创 2019-06-08 21:57:20 · 322 阅读 · 0 评论 -
栈的应用实例4—表达式求值
栈的应用实例4—表达式求值这里用栈的特殊结构实现了算术的四则运算:先乘除后加减,从左算到右。输入格式举例:#4+2*3-10/5#(#为句子的开始或结束符号)。这里我偷了个懒,并没有实现改变优先级的 “(” 和 “)” ,原理一样。首先定义了两个栈,一个为运算符栈,一个为操作数栈。思路简单来说即为: ①.构造一个算符优先关系表,开始符号进栈,第一个操作数进栈。 ②.当运算符进栈的时候...原创 2019-06-09 21:51:31 · 633 阅读 · 0 评论 -
线索二叉树的中序遍历线索化实现
先码着,明天添加文字说明#include <iostream>#include <cstdio>#include <cstdlib>using namespace std;typedef enum Tag{ Ptr,Thread}PointerTag;//Ptr=0:指针,Thread=1:线索 //二叉链表的结点结构 typede...原创 2019-06-30 21:48:34 · 4622 阅读 · 4 评论