顺序表的定义和初始化(本质其实和我以前发的通讯录项目差不多)

本文介绍了顺序表的两种实现方式,包括静态分配(固定大小数组)和动态分配(动态扩展数组),讨论了它们的特点,如随机访问的高效性、存储密度以及插入和删除操作的便利性受限。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

顺序表定义

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

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

顺序表的实现--静态分配

#include<stdio.h>
#define MaxSize 10  //定义最大长度
typedef struct 
{
    int data[MaxSize];//用静态的“数组”存放数据元素
    int length;       //顺序表的当前长度
}SqList;              //顺序表的类型定义
//基本操作--初始化一个顺序表
void InitList(SqList &L)
{
    for(int i=0;i<MaxSize;i++)
{
    L.data[i]=0;
    L.length=0;
}
}
int main()
{
    SqList L;     //声明一个顺序表
    InitList(L);  //初始化顺序表
    //...
    return 0;
}

Q:如果“数组”存储了怎么办?可以放弃治疗,顺序表的表长刚开始确定后就无法更改(存储空间是静态的)

思考:如果刚开始就声明一个很大的内存空间,存在什么问题?

顺序表的实现--动态分配

#define InitSize 10   //顺序表的初始长度
typedef struct
{
    ElemType * data;  //指示动态分配数组的指针
    int MaxSize;      //顺序表的最大容量
    int length;       //顺序表的当前长度
}SeqList;             //顺序表的类型定义(动态分配方式)
void InitList(SeqList& L)
{
    //用malloc函数申请一片连续的存储空间
    L.data=(int *)malloc(InitSize*sizeof(int));
    L.length=0;
    L.MaxSize=InitSize;
}
//增加动态数组的长度
void IncreaseSize(SeqList& L,int len)
{
    int* p=L.data;
    L.data=(int *)malloc(L.MaxSize+len)*sizeof(int));
    for(int i=0;i<L.length;i++)
    {
       L.data[i]=p[i];       //将数据复制到新区域
    }
    L.MaxSize=L.MaxSize+len; //顺序表最大长度增加len
    free(p);                 //释放原来的内存空间
}
int main()
{
    SeqList L;//声明一个顺序表
    InitList(L);//初始化顺序表
    IncreaseSize(L,5);
    return 0;
}

顺序表特点

  • 随机访问:能在O(1)时间内找到第i个元素
  • 存储密度高
  • 拓展容量不方便
  • 插入、删除数据元素不方便

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

写不出bug的小李

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

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

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

打赏作者

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

抵扣说明:

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

余额充值