数据结构入门

线性结构

线性表

实现方式:

数组(又称顺序表):

支持根据索引随机访问,支持用地址访问

链表:

链表之间用指针连接,不支持随机访问。

链表结点的定义:

typedef struct LNode{
    int val;
    struct LNode* next;
}List,LNode;

栈和队列(输入/输出受限的双端队列)

栈:

有口无肛门(?)结构,吃了吐,进出全在一端,且先进栈的元素会被后进栈的压在下面。

所以栈具有后进先出(LIFO)特性。

队列:

有口有肛门,先吃的先拉(好像有点恶心但是确实挺形象的)

正经队列是不允许插队的,就像吃饭只能从嘴里吃进去,所以只能在队尾加入新元素。

出队时是队首元素出队,所以队列具有先进先出(FIFO)特性

非线性结构

一些概念:结点,祖先 / 父(双亲)/ 子(子女)/ 兄弟,度,深度,高度,宽度,路径

二叉树(一些结论可以推广到n叉树)

二叉查找树()

平衡二叉树(AVL Tree)

红黑树

B树/B-树

一些概念:点,边(有向边与无向边),连通图与非联通图,强连通图与弱连通图,连通分量

图的实现:

邻接矩阵:一个二维数组,g[i][j]存储的是从i到j的路径长度(权重)

        如果是无向图,只需要存储一半空间,但这并不代表占用的空间会降低,因为申请的是n*n大小的二维数组。可以使用一位数组模拟二维数组达到减小空间占用的目的。

邻接表:一个线性表存储表头节点,每个节点是一个链表的起点,该链表中存储与表头结点之间有边的所有结点。

        边节点可以定义为

typedef struct Gnode{
    int val;//路径长度
    LNode* nextnode;
}Gnode;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值