数据结构之线性表

一、线性表的定义及特点

1)线性表(list)定义:包含若干个具有相同数据特征的数据元素构成的线性序列。

线性表L可以用二元组形式描述:L=(D,R),其中D为数据集合(data),R为关系集合(relation)。

2)线性表的特点:在线性表的数据集合D中,除第一个元素a_{0}外,每一个元素有且只有一个直接前驱元素,除了最后一个元素a_{n}外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。

例,设有一个顺序表L={1,2,3,4,5,6},则它的关系如图所示

使用L=(D,R) 表示,则D = {1,2,3,4,5,6}(n=6)

                                   R = {<1,2><2,3><3,4><4,5><5,6>}

二、线性表的顺序存储结构

1、线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素,这种存储结构的线性表称为顺序表。

2、顺序存储的特点:逻辑上相邻的两个元素,在存储位置上也是相邻的。

顺序存储的不足:插入和删除操作的时间复杂度大

特点:逻辑上相邻的两个数据元素,其物理位置也是相邻的。

3、顺序表的存储结构

在c语言当中,可以借助一维数组来描述顺序表L:

#define maxsize 100//顺序表的最大长度

typedef int datatype;//datatype的类型根据实际情况而定,这里假定为int
typedef struct 
{
    datatype data[maxsize];
    int last;     
}sqlist,*sqlink;

4、创建一个空的顺序表L:


sqlink list_create()
{
    sqlink L;
    if((L = malloc(sizeof(sqlist))) == NULL) {
		printf("malloc failed\n");
		return L;
	}

	//初始化顺序表
	memset(L,0,sizeof(sqlist));//引用memset函数,要引用"stdlib.h"头文件
	L->last = -1;

	return L;
}

5、清空顺序表

//ret 0-清除成功 -1-清除失败
int list_clear(sqlink L) {

	if(L == NULL)
		return -1;
	
	memset(L,0,sizeof(sqlist));
	L->last = -1;

	return 0;
}

6、查找数据元素位置

int list_locate(sqlink L)
{
    int list_locate(sqlink L, data_t value){
	
	int i;
	for(i = 0;i <= L->last;i++) {
		if(L->data[i] == value)
			return i;
	}
	return -1;
}

7、判断顺序表是否为空

8、求线性表长度

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值