数据结构与算法——第二章 线性表(2)

目录

2.4 线性表顺序表示和实现

2.4.1 线性表的顺序存储表示

2.4.2 顺序表基本操作的实现

顺序表的查找操作: 

顺序表的插入:

顺序表的删除:

小结:

2.4 线性表顺序表示和实现

2.4.1 线性表的顺序存储表示

1.顺序存储定义:把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构。

2.顺序存储占用一片连续的存储空间,有空的存储单元的话则不是顺序存储结构。

3.所以知道i个元素的存储位置,则可以知道i+1元素的位置。

LOC(ai)+(maxlen-1)×l

特点:以物理位置相邻表示逻辑关系。任一元素均可随机存取。(优点)

#define LIST_INT_SIZE 100 
typedef struct{

    ElemType elem[LIST_INT_SIZE];
    int length; 
}SqList;

// 多项式的顺序存储结构类型定义

#define MAXSIZE 1000  // 多项式可能达到的最大长度

typedef struct{       // 多项式非零项的定义
    float p;          // 系数
    int e;            // 指数
}Polynomial;

typedef struct{
    Polynomial *elem; // 存储空间的基地址
    int length;       // 多项式中当前项的个数
}SqList;              // 多项式的顺序存储结构类型为SqList

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

2.4.2 顺序表基本操作的实现

基本操作:

顺序表的查找操作: 

1.按值查找

        e.g.顺序表的查找

int LocateElem(SqList ElemType e) 
//在线性表L中查找值为e的数据元素,返回其序号(是第几个元素)
{
    for(i=0; i<L.length; i++)
        if(L.length[i] == e)
            return i+1;  //查找成功,返回序号
    return 0;            //查找失败,返回0

}

平均查找长度ASL:为确定记录在表中的位置,需要与给定值进行比较的关键字的个数的期望值叫做查找算法的平均查找长度。

顺序表的插入:

1.插入位置可在最后、中间、最前。

2.算法思想:

Status ListInsert_Sq(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;

}

顺序表的删除:

1.删除位置可在最后、中间、最前。

2.算法思想:

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

}

小结:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清园暖歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值