深入理解线性表两种储存结构的定义

线性表定义:具有相同属性的数据对象的集合;

从定义中以及我们做过相关的题可以知道这里的对象可以分为两种情况:

①:数据对象只含有一种数据类型在里面(数组);

②:数据对象含有多种不同的数据类型在里面(链表);

所以接下来我们讨论:分别在这两种情况下的顺序储存和链式储存(用数据结构的方法书写)。

一:情况①

顺序储存:

typedef struct{
int *c //用整型举例说明
int length //长度
}Sqlist;
//顺序表定义完毕
//接下来我初始一个线性表,并且让其长度为100;
Initsqlist{
Sqlist l;
l.char=(int *)malloc(sizeof(int)*100);
l.length=100;
}//顺序表构建完毕

//问题1:计算字节数的时候为什么不用Sqlist而是用int
//问题2:线性表跟我们平常直接用数组储存数据,不定义结构体,这两者有何区别

问题一:

两种写法表示的含义不同:用Sqlist:表示的是开辟100个这样的结构体空间,而用Int表示的是开辟100个int类型的空间,而结构体里面得c只是储存了新开辟数组的地址而已。

当然咯用Sqlist写法本身就是错误的,因为指针c本身只能指示int 类型的数据地址

问题二:平常用数组来储存int类型的数据或者char,而不定义一个结构体呢?其实没有什么区别。只是在不同情况下写法不同罢了。用结构体的方法写只不过是更强调构成了一个线性表。

链式储存:

typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode;
//链式储存因为地址本身是不连续的所以我们不需要一次开辟多个结构体的地址,只需要每次用的时候开辟一个进行了。 正是因为这个所以链表和顺序表在写法上会有很多的不同

二:情况②:

顺序储存:要储存多个不同含义的数据元素,那么需要额外再建立一个结构体。

typedef struct{
int c;
int b;
}l;
typedef struct{
l *t;
int length;
}Sqlist;
//建立完毕
//假设开辟100个这样的空间
InitSqlist{
Sqlist h;
l *m=(l *)malloc(sizeof(l)*100);
}
//假设我要访问第五个空间里面的b值
m=m+5;
m->b;

如果不以教材上面的这种方法建立含多个元素的线性表:直接在线性表里面含多个元素

如下:

typedef struct{
int c;
int b;
}Sqlist;
//建立100个这种空间
Sqlist a[100];
a[4].b//访问第五个空间里面的b值

//以把数组定义成为一个结构体的类型,应该是可行的
//但是这里的数组绝对不是一个二维数组,因为二维数组是数组套数组
其实对于确定的一个地址只是含有一个数据域(一个元素)

链式储存:

typedef struct{
int data;
int elem;
//中间可以填很多个
struct *next;
}Lnode;

//这个是一边建立一边赋值储存

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值