数据结构第一次笔记

  •     第一章 绪论
    ✔​数据结构的基本概念
    1.数据是能输入到计算机中并能被计算机程序识别和处理的符号。
    2.数据元素是数据的基本单位。构成数据元素的最小单位称为数据项。
    ✔数据结构是指相互之间存在一定关系的​数据元素的集合。数据结构分为逻辑结构和存储结构。
    1.逻辑结构是指数据元素以及数据元素之间的逻辑关系,是从实际问题抽象逻辑。
    2.存储结构又称为物理结构,是数据以及逻辑结构在计算机中的表示。存储结构除了存储数据元素之外,必须隐式或显式地存储数据元素之间的逻辑关系。存储结构分为顺序存储结构和链式存储结构。
    ✔抽象数据类型是一个数据模型以及定义在该模型上的一组操作的总称。
    ✔算法是对特定问题求解步骤的一种描述,是指令的有限序列。
    三个特性​:有限性、确定性、可行性。
    可以无输入,但必须有输出。
    ✔算法描述方法:自然语言、流程图、程序设计语言、伪代码。
    ✔时间复杂性:事前估计法、事后统计法。
    ✔空间复杂性:需要的辅助空间数量。​
    模板——泛型程序设计
    ✔模板是对具有相同特征​的函数或类的再抽象,模板是一种参数化的多态性工具。——函数模板和类模板。
    1.函数模板定义
    template<模板形参表>(引导词 class 参数)
    返回值 函数名(参数表){函数体}
    2.类模板定义(每一个成员函数都自动成为函数模板)
    template<模板参数表>​class 类模板名
    {成员的声明;}
    类外:
    template<模板形参表>
    返回值类型 类模板名<形参命表>::成员函数名(参数表)
    {成员函数体;}​
     第二章 ​线性表
    ✔线性表简称表,是n个数据元素的有限序列,线性表中数据元素的个数简称线性表的长度。
    ✔在序列之中,元素a1无前驱,元素an无后继,其他每个元素有且仅有一个前驱和一个后继。
    ✔线性表的顺序结构称为顺序表,其基本思想是用一段地址连续的存储单元依次存储线性表的数据元素。采用顺序存储结构。
    ✔顺序表的实现​
    1.无参构造函数——初始化顺序表
    2.有参构造函数——建立顺序表
    3.求顺序表的长度
    4.遍历操作
    5.按位查找
    6.按值查找
    7.插入操作
    8.删除操作
    const int MaxSize=100;
    template<class T>
    class SeqList
    {
    public:
    SeqList();
    SeqList(T a[],int n);
    ~SeqList();
    int Length();
    T Get(int i);
    int Locate(T x);
    void Insert(int i,T x);
    T Delete(int i);
    int Empty();
    void PrintList();
    private:
    T data[MaxSize];
    int length;
    };​
    ✔单链表是用一组任意的存储单元存放线性表的元素,这组存储元素可以连续也可以不连续,甚至可以零散在内存中的任意位置。其中,data为数据域,存放数据元素;next为指针域,存放该节点的后继结点的地址。
    ✔变量的三要素:名字、内存地址、值
    ✔通常在单链表的开始结点之前附设一个类型相同的结点,称为头结点。
    ✔单链表的实现​
    1.无参构造函数——单链表的初始化
    2.遍历操作
    3.​求单链表的长度
    4.按位查找
    5.按值查找
    6.插入操作
    7.构造函数——建立单链表
      两种方法:头插法和尾插法
    template<class T>
    class LinkList
    {
    public:
    LinkList();
    LinkList​(T a[],int n);
    ~LinkList();
    int Length();
    T Get(int i);
    int Locate(T x);
    void Insert(int i,T x);
    T Delete(int i);
    int Empty();
    void PrintList();
    private:
    Node<T>*first;
    };​
    ​头插法:
    template<class T>
    LinkList<T>::LinkList(T a[],int n)
    {
    first=new Node<T>;
    first->next=nullptr;
    for(int i=0;i<n;i++)
    {​
    Node<T>*s=nullptr;
    s=new Node<T>; s->data=a[i];
    s->next=first->next; first->next=s;
    }}
    尾插法:
    template<class T>
    LinkList<T>::LinkList(T a[],int n)
    {
    first=new Node<T>;
    Node<T>*r=first,*s=nullptr;
    for(int i=0;i<n;i++)
    {​
    s=new Node<T>; s->data=a[i];
    r->next=s; r=s;
    }
    r->next=nullptr;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值