数据结构

数据结构

数据结构都有哪些?

线性表、栈、队列、串、数组、树、堆、图

1.线性表?

1.1顺序表示

数组:把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里。用这种方法存储的线性表简称顺序表。是一种随机存的存储结构。顺序存储指内存地址是一块的,随机存取指访问时可以按下标随机访问,存储和存取是不一样的。如果是存储,则是指按顺序的,如果是存取,则是可以随机的,可以利用元素下标进行。

1.2链式表示

单向链表:每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。同时,由于最后一个结点无后继,故结点的指针域为空,即NULL。头插法建表(逆序)、尾插法建表(顺序)。增加头结点的目的是算法实现上的方便,但增大了内存开销。

双向链表:在单链表的每个结点里再增加一个指向其直接前趋的指针域prior。这样就形成的链表中有两个方向不同的链。双链表一般由头指针唯一确定的,将头结点和尾结点链接起来构成循环链表,并称之为双向链表。设指针p指向某一结点,则双向链表结构的对称性可用下式描述:p—>prior—>next=p=p—>next—>prior。从两个方向搜索双链表,比从一个方向搜索双链表的方差要小。

2.栈

栈(stack)是限定仅在表尾进行插入或者删除的线性表。对于栈来说,表尾端称为栈顶(top),表头端称为栈低(bottom)。不含元素的空表称为空栈。因为栈限定在表尾进行插入或者删除,所以栈又被称为后进先出的线性表(简称LIFO:Last
in, First out.结构)。

在这里插入图片描述
在这里插入图片描述

3.队列

  • front指针指向队头元素
  • rear指针指向队尾元素的下一个位置
  • 空队时:rear == front
  • 队列初始化:rear = front = 0
  • 入队:队未满时,先送值到队尾,再队尾指针加一
  • 出队:队为空时,先取队头元素,再队头指针加一

在这里插入图片描述

4.什么是串?

串(String)是由零个或多个字符组成的有序数列.一般记为S = ′ a 1 , a 2 , . . . , a n ′ ,其中a
i可以是字母,数字或其它字符.子串串中任意个连续的字符组成的子序列称为该串的子串,包含子串的串为主串.

5.什么是数组?

数组是指一组数据的集合,(容器)数组中的每个数据称为元素。

在Java中,数组也是Java对象。数组中的元素可以是任意类型

(包括基本类型和引用类),但同一个数组里只能存放类型相同的元素,长度不可变

一维数组:int[] n=new int[]{1,2,3,4};

二维数组:int[][] n=new int[][]{{1,2,3,4},{1,2,3,4},{1,2,3,4}}

6.什么是树?

  • 树结点:包含一个数据元素及若干指向子树的分支;
  • 孩子结点:结点的子树的根称为该结点的孩子;
  • 双亲结点:B结点是A结点的孩子,则A结点是B结点的双亲;
  • 兄弟结点:同一双亲的孩子结点;
  • 堂兄结点:同一层上结点;
  • 结点层次:根结点的层定义为1;根的孩子为第二层结点,依此类推;
  • 树的高(深)度:树中最大的结点层
  • 结点的度:结点子树的个数
  • 树的度:树中最大的结点度。
  • 叶子结点:也叫终端结点,是度为0的结点;
  • 分枝结点:度不为0的结点(非终端结点);
  • 森林:互不相交的树集合;
  • 有序树:子树有序的树,如:家族树;
  • 无序树:不考虑子树的顺序;

在这里插入图片描述

刚开始学习接触到的就是二叉树:

一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一

个根节点加上两棵别称为左子树和右子树的二叉树组成。

二叉树的特点:

  • 每个结点最多有两棵子树,即二叉树不存在度大于2的结点。

  • 二叉树的子树有左右之分,其子树的次序不能颠倒。

  • 满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k)
    -1 ,它就是满二叉树。

  • 完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
    要注意的是满二叉树是一种特殊的完全二叉树。

在这里插入图片描述

7.什么是堆?

堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。

堆的性质:

  1. 堆中某个节点的值总是不大于或不小于其父节点的值。

  2. 堆总是一棵完全二叉树

将根节点最大的堆叫做最大堆或大顶堆,根节点最小的堆叫做最小堆或小顶堆。

常见的堆有二叉堆、斐波那契堆
在这里插入图片描述
在这里插入图片描述

8.什么是图?

图(Graph)是由顶点(vertex)的有穷非空集合和顶点之间边(edge)的集合组成,通常表示为:G(V,E),其中,G表示一个图,V是图G中顶点的集合,E是图G中边的集合

  • 若顶点之间 Vi 和 Vj 之间没有方向,则为无向边,用无序偶对( Vi , Vj )表示
  • 若顶点之间 Vi 和 Vj 之间有方向,则为有向边(也称弧),用有序偶对< Vi , Vj >表示, Vi 为弧尾,Vj为弧头

在这里插入图片描述

1)简单图

图中既无吊环又无多重边,即为简单图

在这里插入图片描述

(2)无向图

如果图中任意两个顶点之间的边都是无向边(简而言之就是没有方向的边),则称该图为无向图(Undirected graphs)

(3)有向图

如果图中任意两个顶点之间的边都是有向边(简而言之就是有方向的边),则称该图为有向图(Directed graphs)

(4)完全图

  • 无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。(含有n个顶点的无向完全图有(n×(n-1))/2条边)
  • ​ 有向完全图:是指图中各边都有方向,且每两个顶点之间都有两条方向相反的边连接的图。

注:本文为整理汇总,而非原创

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值