顺序表、链式表、栈、队列

一、什么是数据结构
1、数据结构的起源
    1968年,美国高德纳教授,《计算机程序设计的艺术》的第一卷《基本算法》
    的出版,开创了数据结构和算法的先河
    数据结构是一门研究数据之间的关系和操作的学科,而非计算方法
    数据结构+算法=程序 沃斯,凭借这个观点,获得了图灵奖,这句话展示了程序
    的本质 

2、数据结构的基本概念
    数据:  所有能输入到计算机中,能被程序处理的描述客观事物的符号 (变量、数组)
    数据元素:  组成数据的,有一定意义的基本单位,也称为节点(结构体变量)
    数据项:    有独立含义的数据的最小单位,也叫做域 (结构体成员项)
    数据结构:  相互之间存在一种或多种特定关系的数据元素的集合
    算法:      数据结构所具备的功能,解决特定的问题的方法

3、研究数据结构的三个方面
    数据的逻辑关系
    数据的存储关系
    数据结构的运算
二、逻辑结构与存储结构
数据的逻辑结构:
    集合:      数据元素之间同属于一个集体,但是元素之间没有任何关系
    线性结构:  数据元素之间存在一对一关系 (表)
    树型结构:  数据元素之间存在一对多关系 
    图型结构:  数据元素之间存在多对多关系
    
数据的存储结构:
    顺序结构:
        数据元素存储在连续的内存中,用数据元素的相对位置来表示关系
        优点:支持随机访问,访问效率极高、适合查找数据、不易产生内存碎片
        缺点:空间利用率低、对内存的要求比较高,插入、删除不方便
        
    链式结构:
        数据元素存储在彼此独立的内存空间中,每个独立的元素也叫做节点,每
        个元素之间增加一个数据项用于存储其它元素的地址,以此来表示元素
        之间的关系    
        优点:插入、删除方便、空间利用率高、适合增删数据          
        缺点:不支持随机访问,只能从前往后逐个访问,容易产生内存碎片
        
    逻辑结构和存储结构的对应关系
        线性表   顺序 链式   
        树       链式 顺序
        图       顺序+链式
三、数据结构和运算
1、建立数据结构 create
2、销毁数据结构 destory
3、清空数据结构 clean
4、数据结构排序 sort
5、插入元素     insert
6、删除元素     delete
7、访问元素     access
8、修改元素     modify
9、查询元素     query
10、遍历数据结构 show print ergodic
四、顺序表和链式表的实现
顺序表:
    数据项:
        储存元素的内存首地址
        表的容量
        元素的数量
    运算:
        创建、销毁、清空、插入、删除、访问、修改、查询、排序、遍历
    
    注意:
        1、不要越界
        2、要保持元素的连续性
    优点:支持随机访问,修改、访问、查询、排序效率比较高、大块的连续内存不容易产生内存碎片
    缺点:插入、删除元素时不方便、效率比较低,对内存的要求较高
链式表:
    节点的数据项:
        数据域:    可以是各种类型的若干个数据项
        指针域:    指向下一个节点  
    由若干个节点通过指针域来一对一地连接在一起形成链式表

    不带头节点:
        第一个节点的数据域中存储的是有效的数据
        当添加、删除节点时,又可以会修改了头节点的指针,参数就需要使用二级指针
        删除时需要获取上一个节点的指针,而头节点没有上一个指针,因此需要额外处理
    
    带头节点:
        第一个节点不使用,仅仅是为了用它来指向第一个数据域有效的节点
        进行插入、删除操作时会比不带头节点的链表要方便
        注意:其它的操作要从第二个节点开始
五、功能受限的表: 对表结构加以限制,形成特殊的表结构
栈:
 只有一个进出口,先进后出,FILO
    顺序栈:
        数据项:
            存储元素的内存首地址
            栈的容量
            栈顶位置
            
       有四种顺序栈:
        top:初值:  0     入栈  top++   空增栈
        top:初值:-1     top++ 入栈    满增栈
        top:初值:cal-1   入栈 top--   空减栈
        top:初值:cal     top-- 入栈   满减栈
        
        运算:
            创建、销毁、入栈、出栈、栈满、栈空、栈顶

    链式栈:
        数据项:
            栈顶节点
            节点的数量
        运算:
            创建、销毁、入栈、出栈、栈空、栈顶

    栈的应用:
        1、函数的调用(栈内存)
        2、生产者消费者模型,栈作为仓库
        3、表达式的解析(中缀表达式转后缀表达式)
        
    常见的面试笔试题:
        某序列为入栈序列,判断正确的出栈序列(先进后出)
        1 2 3 4 5
        3 1 2 4 5   NO

        
        问题:
            两个顺序栈如何使用才能使空间利用率最大化?
队列:
    一个端口进,另一个端口出,先进先出 FIFO
    顺序队列:
        数据项:
            存储元素的内存首地址
            容量
            队头    出
            队尾    入  即将入队的位置
        运算:
            创建、销毁、入队、出队、队空、队满、队头、队尾、元素数量
        
        顺序队列是由一维数组+队头位置front+队尾位置rear组成,入队时
        rear+1,出队时front+1,为了让队列能够反复使用,我们要把一维数组
        想象成一个环,因此front、rear加1后都要对容量cal求余
            front = (front+1)%cal
            rear = (rear+1)%cal

            如何判断队空:front == rear
            如何判断队满:front == (rear+1)%cal

    计算顺序队列中元素数量:(rear-front+cal)%cal

    链式队列:
    由若干个节点组成的队列
    数据项:
        队头指针
        队尾指针
        节点数量
    运算:
        创建、销毁、队空、入队、出队、队头、队尾、数量

队列的应用:
    1、消息的排队
    2、树的层序遍历
    3、图的广度优先遍历
    4、封装线程池、数据池
常见的队列笔试面试题
    如何使用两个栈来模拟一个队列的功能
        栈1不满,都可以入队
        栈1满,栈2空,可以入队,前提是从栈1到栈2一个不留
        栈2不空栈,栈1一定不能到栈2
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值