4.22 数据结构408线性表学习笔记

线性表

线性表是具有相同数据类型的n个数据元素的有限序列

表头元素、表尾元素

线性表的特点:

  • 表中元素的个数有限
  • 表中元素具有逻辑上的顺序性,表中元素有其先后顺序
  • 表中元素均为同一数据类型,意味着每个元素所占的存储空间大小相等。
  • 表中元素都是数据元素,每个元素都是单个元素。
  • 表中元素具有抽象性,即只讨论元素间的逻辑关系,而不考虑元素具体表示什么内容。

c++传递引用参数:

想让函数对参数的改变被带回来时使用。

顺序表

定义:线性表的顺序存储

位序:从1开始

在高级程序设计语言中通常用数组来描述线性表的顺序存储结构。

顺序表的实现

顺序表(存储结构)实现:静态分配,动态分配,realloc

静态分配:

int Maxsize=0;
typedef struct {
    int data[Maxsize];
    int length;
}Sqlist;
Sqlist s;

大小不能再改变,满了就不能再用了

动态分配:

c语言:malloc、free

c++:new data[Maxsize]、delete

int M=10;
typedef struct{
    int *data;
    int Maxsize;
    int length;
}Sqlist;
void InitList(Sqlist &L)//初始化顺序表
{
    L.Maxsize = M;
    L.data = (int *)malloc(sizeof(int)*L.Maxsize);
    L.length=0;//防止脏数据
}
void IncreaseList(Sqlist &L,int len)//改变顺序表大小
{
    int *p = L.data;//把原来的数据先存下来,L.data会指向新的内存地址,没有新的指针原来的数据会找不到
    L.data = (int *)malloc(sizeof(int)*(L.Maxsize+len));
    for(int i=0;i<L.Maxsize;i++)
    {
        L.data[i]=p[i];
    }
    L.Maxsize = L.Maxsize+len;
    free(p);//释放p指向的内存
}

顺序表:随机访问,存储密度高,拓展容量不方便,插入删除操作不方便。

存储密度高:相比链表来说,链表的每个节点还要存储指针,顺序表不用,所以密度高。

动态分配拓展容量需要复制,代价较大。

动态分配内存会产生脏数据,c语言自动赋值,但是有的编译器不会赋值,所以给length赋值为0.

  •  c语言结构体声名 struct和typedef struct 的区别

typedef struct声名结构体,在声名结构体变量时可以直接 结构体名称 变量名:

int Maxsize=0;
typedef struct {
    int data[Maxsize];
    int length;
}Sqlist;
Sqlist s;

struct声名结构体,声名结构体变量时需要 struct 结构体名称 变量名: 

int Maxsize=10;
struct Sqlist{
    int data[Maxsize];
    int length;
};
struct Sqlist s;

 struct结构体声名常见两种形式:

int Maxsize=10;
struct Sqlist{
    int data[Maxsize];
    int length;
};


struct{
    int data[Maxsize];
    int length;
}Sqlist;

下面这种声名方式结构体为匿名结构体,无法引用,在struct前typedef即可引用。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值