数据结构---线性表

线性表的定义和特点

线性表的定义:用数据元素的有限序列表示
同一线性表中的元素必定具有相同特性

线性表的顺序存储和实现

线性表的顺序存储结构:线性表的顺序存储结构,就是用一组连续的内存单元依次存放线性表的数据元素。
#define MAXSIZE 100 //线性表可能达到的最大长度

typedef struct
{
ElemType *elem; //存储空间的首地址
int length; //线性表中当前元素个数
}SqList; //线性表的类型命名为SqList

重要基本操作的算法实现

初始化线性表L(参数用引用)

Status InitList(SqList &L){ //构造一个空的顺序表L
L.elem=new ElemType[MAXSIZE]; //为顺序表分配空间
if(!L.elem) exit(OVERFLOW); //存储分配失败
L.length=0; //空表长度为0
return OK;
}

获取线性表L中的某个数据元素的内容

Status GetElem(SqList L,int i,ElemType &e)
{
if (i<1||i>L.length) return ERROR;
//判断i值是否合理,若不合理,返回ERROR
e=L.elem[i-1]; //第i-1的单元存储着第i个数据
return OK;
}

在线性表L中第i个数据元素之前插入数据元素e

Status ListInsert(SqList &L,int i ,ElemType e){
if(i<1 || i>L.length+1) return ERROR; //i值不合法
if(L.length==MAXSIZE) return ERROR; //当前存储空间已满
for(j=L.length-1;j>=i-1;j--)
L.elem[j+1]=L.elem[j]; //插入位置及之后的元素后移
L.elem[i-1]=e; //将新元素e放入第i个位置
++L.length; //表长增1
return OK;
}

将线性表L中第i个数据元素删除

Status ListDelete(SqList &L,int i){
if((i<1)||(i>L.length)) return ERROR; //i值不合法
for (j=i;j<=L.length-1;j++)
L.elem[j-1]=L.elem[j]; //被删除元素之后的元素前移
--L.length; //表长减1
return OK;
}

在线性表L中查找值为e的数据元素

int LocateELem(SqList L,ElemType e)
{
for (i=0;i< L.length;i++)
if (L.elem[i]==e) return i+1;
return 0;
}

顺序表的使用示例

线性表表示的集合,求并集

void unionList(SqList &La, SqList Lb) {
//将所有在线性表Lb中但不在La中的数据元素插入到La中
int La_len, Lb_len, i, e;
La_len = GetLength(La);
Lb_len = GetLength(Lb); //求线性表的长度
for (i = 1; i <= Lb_len; i++) {
GetElem(Lb, i, e); //取Lb中第i个数据元素赋给e
if (!LocateElem(La, e)) //La中不存在和e相同的数据元素,则插入
{
ListInsert(La,++La_len, e);
}
}
}

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值