1.线性表的定义和基本操作
1.1线性表的定义
线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列
如上图a1称为表头元素 a6称为表尾元素。除了a1每个元素有且仅有一个直接前驱,除了a6每个元素有且仅有一个直接后驱。
线性表根据不同的存储结构,划分为顺序表(顺序存储)和链表(链式存储)。
1.2线性表的基本操作
(若用L命名线性表)
初始化表。构建一个空的线性表L。
求表长。返回线性表长度,即L中元素个数。
按值查找。在表L中查找具有给定关键字值得元素。
按位查找。获取表中第i个位置的元素的值。
插入操作。在表第i个位置插入元素
删除操作。删除表中第i个位置的元素。
输出操作。按顺序输出线性表所有元素值。
判空操作。判断表是否为空。
摧毁操作。销毁线性表,并释放线性表所占用的堆区内存空间。
2.顺序表
2.1顺序表的定义
线性表的顺序存储称为顺序表,特点是表中逻辑顺序与其物理顺序相同。
假定顺序表的元素类型为ElemType,为了简单假设ElemType为int类型(ElemType类型不是重点,重要的是讨论元素之间的逻辑关系)。
typedef int ElemType;
顺序表的类型涉及如下:
#define MAX 10
typedef struct{
ElemType data[MAX]; //线性表元素
int length; //线性表当前长度
}SeqList;
2.2顺序表基本操作之初始化,判满,判空,插入,输出
1.初始化
SeqList *create_empty_seqlist(){
SeqList *l = NULL;
l = (SeqList *)malloc(sizeof(SeqList)); //分配存放空间
if(NULL == l) //判空时注意NULL写前面,若写成NULL=l系统会报错
{
printf("malloc is fail");
return NULL;
}
memset(l,0,sizeof(SeqList)); //内存区域全置0,非必要
l->length = 0;
return l;
}
2.判满
int is_full_seqlist(SeqList *l){
return l->length == MAX ? 1 : 0;
}
3.判空
int is_empty_seqlist(SeqList *l){
return l->length == 0 ? 1 : 0;
}
4.插入
依次插入
void insert_data_seqlist(SeqList *l,ElemType data){
l->data[l->length] = data;
l->length = l->length+1;
return;
}
按位插入
int ListInsert(SeqList *l,ElemType data,int i){
if(i<1||i>l->length+1) //判断插入位置是否有效
return 0;
if(l->length >= MAX)
return 0; //存储空间已满,不能插入
for(int j = l->length;j >= i;j--){
//将第i个元素及之后元素后移
l->data[j]=l->data[j-1]
}
l->data[i-1]=data;
l->lenght++;
return 1;
}
5.输出
void printf_data_seqlist(SeqList *l){
for(int i = 0;i < l->length;i++){
printf("%d\n",l->data[i]);
}
printf("\n");
}
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦