• [Data Structures] 线性表


         线性结构的特点是:在数据元素的非空有限集合中,
    • 存在唯一的一个被称做“第一个”的数据元素;
    • 存在唯一的一个被称做“最后”一个的数据元素;
    • 除第一个外,集合中的每个数据元素均只有一个前驱;
    • 除最后一个之外,集合的每个数据元素均只有一个后继。
      线性表是最常用且最简单的一种数据结构。简言之,一个线性表是n个数据元素的有限序列,它的长度可以根据需要增长或缩短,即对线性表的数据元素不仅可以进行访问,还可进行插入和删除等。
      线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。
    假设线性表的每个元素占用l个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储位置。则线性表的第i+1个数据元素的存储位置和第i个数据元素的存储位置之间满足如下关系:(i+1)的位置= i 位置+l.
      高级程序设计语言中数据类型具有随机存取的特性,因此通常都用数据来描述数据结构中的顺序存储结构。由于线性表长度可变,且所需最大存储空间随问题不同而不同,C语言中可用动态分配的一维数组描述。

      我们看一下C语言数组的存储及元素位置之间的关系。

    C源码
    int main(void)
    {
        
    int a[3= {1,2,3};

        
    int *= a;

        
    return 0;
    }

    编译用gdb调试分析
    abeen@ubuntu:~/Documents/C$ gcc test.c -g
    abeen@ubuntu:~/Documents/C$ gdb ./a.out
    GNU gdb (GDB) 7.0-ubuntu
    Copyright (C) 2009 Free Software Foundation, Inc.
    (gdb) list
    1    
    2    int main(void)
    3    {
    4        int a[3] = {1,2,3};
    5    
    6        int *b = a;
    7    
    8        return 0;
    9    }
    (gdb) b 8
    Breakpoint 1 at 0x80483d5: file test.c, line 8.
    (gdb) r
    Starting program: /home/abeen/Documents/C/a.out

    Breakpoint 1, main () at test.c:8
    8        return 0;
    (gdb) p $esp
    $1 = (void *) 0xbffff488
    (gdb) info local
    a = {1, 2, 3}
    b = 0xbffff488
    (gdb) info frame
    Stack level 0, frame at 0xbffff4a0:
     eip = 0x80483d5 in main (test.c:8); saved eip 0x14eb56
     source language c.
     Arglist at 0xbffff498, args:
     Locals at 0xbffff498, Previous frame's sp is 0xbffff4a0
     Saved registers:
      ebp at 0xbffff498, eip at 0xbffff49c
    (gdb) x/12xw 0xbffff480
    0xbffff480:    0x00167345    0x005c4d20    0x00000001    0x00000002
    0xbffff490:    0x00000003    0xbffff488(b)    0xbffff518(ebp)    0x0014eb56(eip) 
    0xbffff4a0:    0x00000001    0xbffff544    0xbffff54c    0xb7fff858
    可见数组元素的存储确实用连续的存储单元。
    (gdb) info local
    a = {1, 2, 3}
    b = 0xbffff488
    (gdb) p &a
    $3 = (int (*)[3]) 0xbffff488

  • 相关阅读:
    golang学习 ---并发获取多个URL
    MySQL的my.cnf文件(解决5.7.18下没有my-default.cnf)
    Python ElasticSearch API
    linux 输出重定向 何时会写文件
    Linux top命令的用法详细详解
    mysql 5.7.13 安装配置方法(linux)-后期部分运维
    linux下各目录的作用
    MySQL 获得当前日期时间 函数
    mysql导入大批量数据出现MySQL server has gone away的解决方法
    python之MySQL学习——防止SQL注入
  • 原文地址:https://www.cnblogs.com/abeen/p/1627818.html
Copyright © 2020-2023  润新知