25考研数据结构复习·2.2顺序表

  • 存储/物理结构

    • 顺序表(顺序存储)

      • 定义(如何用代码实现)

        顺序表——用顺序存储的方式实现线性表顺序存储。

        把逻辑上相邻的元素存储在物理位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

如何知道一个数据元素大小?

  • C语言 sizeof(ElemType)

    sizeof(int) = 4B

    typedef struct{
    		int num;  //号数
    		int people; //人数
    }Customer;
    

    sizeof(Customer) = 8B

  • 基本操作的实现

    • 静态分配

      #define MaxSize 10  //定义最大长度
      typedef struct{
      		ElemType data[MaxSize];  //用静态的“数组”存放数据元素
      		int length;  //顺序表的当前长度
      }SqList;  //顺序表的类型定义(静态分配方式)Sq:sequence ——顺序,序列
      

       
      #include <studio.h>
      #define MaxSize 10  //定义最大长度
      typedef struct{
      		ElemType data[MaxSize];  //用静态的“数组”存放数据元素
      		int length;  //顺序表的当前长度
      }SqList;   //顺序表的类型定义
      
      //基本操作——初始化一个顺序表
      void InitList(SqList &L){
      ②		for(int i = 0;i < MaxSize;i++){
      				L.data[i] = 0;  //将所有数据元素设置为默认初始值
      ③			L.length = 0;  //顺序表初始长度为0
      		}
      }
      int main(){
      ①		SqList L;  //声明一个顺序表
      		InitList(L);  //初始化顺序表
      		//...未完待续,后续操作
      		return 0;
      }
      


      ❔如果不给data数组设置默认初始值,会发生什么情况?

      #include <studio.h>
      #define MaxSize 10  //定义最大长度
      typedef struct{
      		ElemType data[MaxSize];  //用静态的“数组”存放数据元素
      		int length;  //顺序表的当前长度
      }SqList;   //顺序表的类型定义
      
      //基本操作——初始化一个顺序表
      void InitList(SqList &L){
      ③			L.length = 0;  //顺序表初始长度为0
      }
      int main(){
      ①		SqList L;  //声明一个顺序表
      		InitList(L);  //初始化顺序表
      		//尝试“违规”打印整个data数组
      		for(int i = 0; i < MaxSize; i++)
      				printf("data[%d] = %d\\n",i,L.data[i]);
      		return 0;
      }
      

    • 内存中会有遗留的“脏数据”


      ❔如果“数组”存满了怎么办?

      · 可以放弃治疗,顺序表的表厂刚开始确定后就无法更改(存储空间是静态的)

  • 动态分配

    #define InitSize 10  //顺序表的初始长度
    typedef struct{
    		ElemType * data;  //指示动态分配数组的指针
    		int MaxSize;  //顺序表的最大容量
    		int length;  //顺序表的当前长度
    }SeqList;  //顺序表的类型定义(动态分配方式)
    

    💡 Key: 动态申请和释放内存空间

    C —— ma

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Annabelle.02

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值