小张学习日记(数据结构顺序表)

第一  数据结构概述与时间复杂度   (ok,上周没写,这周直接跳到数据结构哈哈)

1.为什么要学习数据结构

为了提高程序的运行效率

2.什么是数据?

数据是指对事物的进行的记录并可以鉴别的符号,可以是文字,图片,字母,特殊字符,视频,音频...,对我们有用的信息都可以称为数据。

3.什么是结构?

结构体是指元素(数据)的相互关联和相互作用的关系,比如学生,图书,交通干线等等

4.根据数据元素之间的关系,分成4个基本结构

  • 集合:结构中的数据是在同属空间内,没有其它关系,比如刚入学的学生

  • 线性结构:数据为一一对应的关系,比如已分发学号的学生,图书馆的图书

  • 树状结构(层次关系):数据为一对多的关系,家族的族谱,公司的架构

  • 图状结构(网状结构):数据为多对多的关系,城市与城市之间的交通干线

5.什么是数据结构

数据结构体 = 数据+数据与数据之间的关系

6.数据结构的组成部分

  1. 逻辑结构

    • 数据之间的内在关系,通常有集合,线性表(一一对应的关系),树(一对多关系),图(多对多的关系)

  2. 存储结构

    • 顺序存储(数组),链式存储(链表),不同的存储方式对数据的处理效率有很大的影响

7.时间复杂度

        公式:T(n) = O(f(n));

        T(n):表示算法的渐进时间复杂度

        f(n):程序运行的次数

        O:表示正比关系

第二  顺序表

1.线性表

1.概念

一对一的数据所组成的关系称为线性表,注意线性表是逻辑结构

线性表中的数据元素可以是各种各样的,但同一线性表中的元素必定具有相同的特性,即同一数据对象(26个英文字母),相邻的数据之间是一对一的关系,比如B字母节点(数据节点)前面是A字母节点,后面是C字母节点,线性表的特性如下:

(1) 存在唯一的一个被称为"第一个"的数据元素

(2) 存在唯一的一个被称为"最后一个"的数据元素

(3) 处了第一个外,集合中每一个数据元素只有一个前驱节点

(4) 除了最后一个外,集合中每个数据元素均只有一个后驱节点

注意:

1.线性表是一种数据内部的逻辑关系,与存储形式无关

2.线性表既可以采用连续的顺序存储(数组),也可以采用离散的链式存储(链表)

3.顺序表和链表都称为线性表

2.顺序表

1.概念

顺序表:顺序存储的线性表

链式表:链式存储的线性表,简称链表

顺序存储就是将数据存储到一片连续的内存中,在C语言环境下,可以 是具名的栈数组,或者是匿名的堆数组。

存储方式不仅仅只是提供数据的存储空间,而是必须要能体现数据之间 的逻辑关系。当采用顺序存储的方式来存放数据时,唯一能用来表达数据间本身的逻辑关系的就是存储位置。

2.基本操作

1.顺序表设计

一般而言,为了方便操作顺序表,需要一个专门管理顺序表 的"管理结构体",管理结构体一般会包括:

(1) 顺序表总容量

(2) 顺序表当前最末元素下标位置

(3) 顺序表指针

管理结构体示例代码

typedef struct
{
    int   capacity; // 顺序表容量
    int   last;     // 最末元素下标
    int * data;     // 顺序表,以整型数据为例
}sequenceList;

初始化

所谓初始化就是建立一个不包含任何元素的顺序表,设置好管理结构体中 的表的总容量、末元素下标,申请好顺序表内存空间等系列准备工作。

下面是初始化顺序表的示例代码:

// 初始化顺序表
sequenceList * init(int cap)
{
    sequenceList *s = malloc(sizeof(sequenceList));
    if(s == NULL)
        return NULL;
    s->capacity = cap;
    s->last = -1;
    s->data = malloc(cap * sizeof(int));
    if(s->data == NULL)
    {
        free(s);
        return NULL;
    }
    return s;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值