学习日记week05

一、什么是数据结构

    1、数据结构起源:

        1968年,美国的高德纳教授,《计算机程序设计艺术》的第一卷--《基本算法》的出版,开创了数据结构和算法的先河。

        数据结构是一门研究数据之间关系和操作的学科,而非计算方法。

        数据结构+算法=程序,沃斯凭借这个观点写的论文,获得图灵奖,这句话展示了程序的本质。

    2、数据结构的基本概念

        数据:所有能够输入到计算机中,能够被程序处理的描述客观事物的符号。

        数据项:有独立含义的最小单位,也叫做域。[结构的成员项]

        数据元素:组成数据的,有一定意义的基本单位,也叫做节点、记录。一个数据元素由若干个数据项组成。[结构变量]

        数据结构:相互之间存在一种或多少种特定关系的数据元素的集合。

        算法:数据结构所具备的功能、解决特定问题的方法

    3、数据结构的三个方面

        数据的逻辑关系:

        数据的物理关系:

        数据结构的运算

        

二、逻辑关系和存储关系:

    1、数据的逻辑关系:

        集合:     数据元素同属于一个集合,但元素之间没有任何关系。

        线性结构:   数据元素之间存在一对一的关系(表)

        树型结构:   数据结构之间存在一对多的关系(树)

        图形结构:  数据结构之间存在多对多的关系(图)

    2、数据的存储结构

        顺序存储:   数据存储在连续的内存中,用数据元素的相对位置来表示关系

            优点:支持随机访问,访问效率极高、适合查找数据

            缺点:空间利用率低,对内存要求高,插入、删除不方便

        链式存储:   数据元素存储在彼此独立的内存从空间中,每个数据元素中增加一个数据项用于存储其他元素的地址,以此来表示数据元素之间的关系。

            优点:空间利用率高,插入、删除方便,适合频繁的增删数据

            缺点:不支持随机访问,只能从前到后逐个访问

    

    逻辑结构与存储结构的对应关系:

        表       顺序  链式

        树       链式  顺序

        图       顺序+链式

        每种逻辑结构采用什么物理存储方式没有明确规定,通常根据实现的难以程度以及空间、时间方面要求来选择最合适的物理存储结构。

三、数据结构的运算:

    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

        顺序栈:

            数据项:

                存储元素的内存首地址

                栈的容量

                栈顶位置

            运算:

                创建、销毁、入栈、出栈、栈满、栈空、查看栈顶元素

            注意:

                栈顶指向顶部的第一个数据,称为满增栈

                栈顶指向接下去要入栈的位置,称为空增栈

                                            满减栈

                                            空减栈

        链式栈:

            数据域:

                栈顶

                节点数量

            运算:

                创建、销毁、入栈、出栈、栈空、查看栈顶元素


 

        栈的应用:

            1、函数的调用(栈内存)

            2、生产者消费者模型(栈作为仓库)

            3、表达式的解析 a+b ab+

        栈的常见笔试面试题:

            某个序列是入栈顺序,判断哪个顺序为合理的出栈顺序

            1 2 3 4 5

            3 1 2 4 5 No

            1 2 3 4 5 Yes

        

        练习:实现一个函数,判断序列b是不是序列a的出栈顺序

        bool is_pop_stack(int *a,int *b,int len)

        {

            //创建一个栈

            //按照A的顺序一个一个入栈

                //按照B的顺序出栈

            //判断栈是否为空

        }

        问题:两个栈怎么使用能够让空间利用率最大化

    队列:一个端口进,另一个端口出,先进先出 FIFO

        顺序队列:

            数据项:

                存储元素的内存首地址

                容量

                队头

                队尾

            运算:

                创建、销毁、入队、出队、队空、队满、队头、队尾、元素个数

        顺序队列是由一维数组+队头位置front+队尾位置rear组成,入队时rear+1,出队时front+1,为了能够让队列反复使用,我们要把一位数组想象成一个环,因此rear、front加一后要用队列的容量求余

            rear = (rear+1)%cal;

            front = (front)+1%cal;

            如何判断队空:front == rear

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

                1、代价是空一个位置不能使用

                2、在结构中添加一个数据项标记队列是空或者满(元素个数)

            如何计算元素的数量:

                (rear-front+cla)%cal



 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值