
数据结构
xuhuimingc
这个作者很懒,什么都没留下…
展开
-
16 二叉树的性质和存储结构
二叉树二叉树的性质性质1:在二叉树的第i层上至多有2i−12^{i-1}2i−1个结点。性质2:深度为k的二叉树至多有2k−12^k-12k−1个结点。性质3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数位n2,则n0=n2+1。完全二叉树:满二叉树深度为k且含有2k−12^k-12k−1个结点的二叉树。满二叉树的特点是:每一层上的结点数都是最大结点数,可以对满二叉树的结点进行连续编号,约定编号从根节点起,自上而下,自左向右。完全二叉树深度为原创 2021-04-27 21:14:11 · 193 阅读 · 0 评论 -
15 树和二叉树
树和二叉树树的定义树是n(n>=0)个结点的有限集,它或为空树(n=0);或为非空树,对于非空树T:有且仅有一个称之为根的结点;除根结点以外的其余结点可分为m(m>0)个互不相交的有限集,其中每一个集合本身又是一棵树,并且称为根的子树。树的结构定义是一个递归的定义。树的基本术语结点:树中的一个独立单元。包含一个数据元素及若干指向其子树的分支。结点的度:结点拥有的子树数称为结点的度。树的度:树的度是树内各结点度的最大值。叶子:度为0的结点称为叶子或终端结点。非终端原创 2021-04-26 20:19:46 · 153 阅读 · 0 评论 -
14 串实例
案例分析病毒感染检测分析:患者的DAN和病毒DNA均是由一些字母组成的字符串序列,要检测某种病毒DAN序列是否在患者的DNA序列中出现过,实际上就是字符串的模式匹配问题。可以使用BF算法或者KMP算法。与一般的模式匹配问题不同的是:病毒的DNA序列是环状的。实现:假设病毒DNA的序列长度为m,因为病毒DNA是环状的,所以为了从任意起点线性的取到每个可行的长度为m的模式串。可将存储病毒DNA序列的字符串长度扩大为2m,即将病毒DNA序列连续存储2次。然后循环m次,依次取得每个长度为m的环状字符串,将此原创 2021-04-25 18:27:21 · 189 阅读 · 0 评论 -
13 广义表
广义表定义广义表是线性表的推广,也称为列表。广义表的元素可以是子表,子表的元素还可以是子表。广义表可以是一个递归的表,即广义表也可以是其本身的一个子表广义表的存储结构通常使用链式存储结构。常用的链式存储结构有两种,头尾链表的存储结构和扩展线性链表的存储结构。头尾链表的存储结构广义表中的数据元素可能为原子或广义表,所以需要两种结构的结点:一种是表结点,用以表示广义表,一种是原子结点,用以表示原子。一个表结点可由3个域组成:标志域、指示表头的指针域、指示表尾的指针域。原子结点只需两个原创 2021-04-25 18:26:23 · 310 阅读 · 0 评论 -
12 数组
数组简介数组可以看成是线性表的推广,其特点是结构中的元素本身可以是具有某种数据结构的数据,但属于同一数据类型。数组一般不做插入或者删除操作,所以采用顺序存储表示数组比较合适。数组的顺序存储在Java和C语言中,用的都是以行序为主序的存储结构,而在FORTRAN语言中,用的都是以列序为主序的存储结构。特殊矩阵的压缩存储所谓压缩存储,是指为多个值相同的元素只分配一个存储空间,对零元不分配空间。假设值相同的元素或者零元素在矩阵中的分布有一定规律,则称此类矩阵为特殊矩阵。特殊矩阵主要包括原创 2021-04-22 19:55:09 · 195 阅读 · 0 评论 -
11 串 BF算法和KMP算法
串串的定义串(string)即字符串,是由零个或多个字符组成的有限序列。一般记作:s=“a1 a2 ... an” (n≥0)s=“a_1 \ a_2 \ ...\ a_n ” \ (n \geq 0)s=“a1 a2 ... an” (n≥0)串中字符的数目n称为串的长度。零个字符的串称为空串,其长度为0。串中任意个连续的字符组成的字符组成的子序列称为该串的子串。字串在主串的位置则以字串的第一个字符正在主原创 2021-04-21 20:39:13 · 152 阅读 · 0 评论 -
10 栈和队列的应用2 表达式求值和舞伴问题
栈和队列的应用表达式求值表达式是由操作数、运算符和界限符组成的,统称为单词。先乘除,后加减从左到右先括号内,后括号外为了便于实现,假设每个表达式以#开始,以#结束。//十以内的加减乘除、结果也为10以内的非负数。#include<iostream>#include<cstring>using namespace std;typedef char ElemType;typedef char SElemType;typedef struct Stack原创 2021-04-21 20:38:03 · 471 阅读 · 2 评论 -
9 栈的应用
案例数制的转换将一个十进制整数N转换为八进制数时,在计算过程中,把N与8求余得到的八进制数的各位依次进栈,计算完毕后将栈中的八进制数依次出栈输出,输出结果就是待求得的八进制数。#include<iostream>using namespace std;typedef int ElemType;typedef int SElemType;//定义链栈typedef struct StackNode{ ElemType data; struct StackNode *next原创 2021-04-15 19:11:50 · 140 阅读 · 0 评论 -
8 队列的表示和操作的实现
队列顺序表示队列的顺序存储结构,用一组地址连续的存储单元依次存放从队列头和队列尾的元素之外,还需要附设两个整型变量front和rear分别表示队列头元素和队列尾元素的位置。初始化创建空队列,令front=rear=0。每当插入新的队尾元素时,尾指针rear增1;每当删除队列头元素时,头指针front增1。在非空队列中,头指针始终指向队列头元素,而尾指针始终指向队列尾元素的下一个位置。typedef struct{ QElemType *base; //存储空间的基地址 int front;原创 2021-04-14 16:03:03 · 294 阅读 · 0 评论 -
7 栈的表示和操作的实现
栈顺序栈的表示和实现利用顺序结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。另设指针base表示栈底元素在顺序栈中的位置。当top和base的值相等时,表示空栈。#include<iostream>using namespace std;//顺序栈的存储结构#define MAXSIZE 100 //顺序栈存储空间的初始分配量typedef int SElemType;typedef struct{原创 2021-04-13 16:22:20 · 296 阅读 · 0 评论 -
6 栈和队列
栈的定义和特点栈是限定仅在表尾进行插入或删除操作的线性表。对栈来说,表尾端有其特殊含义,称为栈顶(top),相应地,表头端称为栈底(bottom)。不含元素的空表称为空栈。后进先出的原则,栈又称为后进先出(LIFO)的线性表。队列的定义和特点队列是一种先进先出(FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。在队列中,允许插入的一端称为队尾(rear),允许删除的一端则称为队头(front)。...原创 2021-04-12 17:28:12 · 72 阅读 · 0 评论 -
5 线性表的合并
应用线性表的合并分别获取LA表长m和LB表长n从LB中第1个数据元素开始,循环n次执行以下操作从LB中查找第i1≤i≤n1 \leq i \leq n1≤i≤n个数据元素赋给e。在LA中查找元素e,如果不存在,则将e插在表LA的最后。#include<cstdio>#include<iostream>using namespace std;typedef int ElemType;//单链表的存储结构typedef struct LNod原创 2021-04-10 16:56:42 · 265 阅读 · 0 评论 -
4 顺序表和链表的比较
顺序表vs链表空间性能的比较存储空间的分配顺序表的存储空间需要预先分配,元素个数扩充受到限制,容易造成存储空间浪费或者溢出的现象。链表不需要预先分配空间,只要内存空间允许,链表中的元素个数就没有限制。当线性表的长度变化较大,难以预估存储规模时,宜采用链表作为存储结构。存储密度的大小存储密度指的是数据元素本身所占用的存储量和整个结点结构所占用的存储量之比。存储密度越大,存储空间的利用率越高。顺序表的存储密度高于单链表的存储密度。当线性表的长度变化不大时,易于先确定大小时,为了节省存储原创 2021-04-08 10:17:26 · 1300 阅读 · 0 评论 -
3 循环链表和双向链表介绍
一些常用的链表结构循环链表特点:表中最后一个结点的指针域指向头结点,整个链表形成一个环。循环链表的操作和单链表基本一致,差别仅在于终止条件不同。在单链表中,判别条件为p!=NULL或p->next!=NULL,而循环单链表的判别条件为p!=L或p->next!=L。双向链表特点:克服单链表单向性的缺点。#include<iostream>using namespace std;typedef int ElemType;typedef struct DuLN原创 2021-04-07 11:13:06 · 175 阅读 · 0 评论 -
2 线性表的链式表示和实现
链表单链表的定义和表示结点:存储本身的信息以及存储一个指示其直接后继的信息数据域:存储数据元素的域指针域:存储直接后继的存储位置单链表的相关操作#include<cstdio>#include<iostream>using namespace std;typedef int ElemType;//单链表的存储结构typedef struct LNode{ ElemType data; //结点的数据域 struct LNode *next; //原创 2021-04-06 16:37:07 · 87 阅读 · 0 评论 -
线性表及其相关操作
线性表的顺序表示和实现线性表的顺序存储表示#define MAXSIZE 100 //顺序表可能达到的最大长度typedef int ElemType; //根据实际需要定义typedef struct{ ElemType *elem; //存储空间的基地址 int length; //当前长度}SqList;基本操作的实现#include<cstdio>#define MAXSIZE 100 //顺序表可能达到的实际长度typedef int El原创 2021-03-25 22:20:52 · 135 阅读 · 0 评论