顺序表

本文详细介绍了线性表的概念,包括其存储结构和特点。线性表使用顺序存储,逻辑结构与物理结构相邻。文章还提供了C语言实现的线性表初始化、查找、插入和删除操作,强调了操作过程中对线性表长度和下标的处理。这些基本操作是数据结构学习中的重要组成部分。
摘要由CSDN通过智能技术生成

顺序表:用一组地址连续的存储单元依次存储线性性表的数据元素。
特点:逻辑结构相邻,物理结构也相邻。
注意:线性表中的元素的下标从1开始,而数组元素的下标从0开始。
线性表的定义:
说白了,线性表就是定义了一个数组,只不过它的空间是动态分配的。而我们定义的数组静态分配的。
#include <stdio.h>
#defing MAXSIZE 100//规定了线性表中length的最大长度。
typedef struct{
ElemType *elem;
int length;
}sqlist;

线性表的初始化:
sqlist L;
void initlist(sqlist &L){
L.elem=(sqlist*)malloc(sizeof(sqlist));
L.length=0;
}

线性表的查找:
线性表的查找写成函数需要的参数:线性表、查找的元素。
int findelem(salist L,int e)//传入一个线性表以及所要查找的元素。
{
int i;
for(i=0;i<L.length;i++){
if(L.elem[i]==e) return i+1;//注意线性表的下标与数组下标的关系,数组的下标加1为线性表下标 。
//函数在这里返回i+1也表明查找成功。
}
return 0;//表明线性表中不含有该元素,查找失败。
}

线性表的插入:
线性表的插入写成函数需要的参数:线性表、插入的元素、以及要插入的位置。
注意:在插入一个元素之后,线性表的长度发生了改变,需要做+1操作,同时,因为长度发生了改变所以线性表的传入要用引用参数(使用指针也可以)。
int ListInsert(SqList &L,int i,ElemType e)//因为插入元素导致线性表的长度变化,所以这里的线性表传入时用引用参数
{
int j;
if(i<=0||i>L.length+1||L.length>=MAXSIZE) return 0;//注意:插入位置合法范围是1到L.length+1。
for(j=L.length-1;j>=i-1;j–){ //注意:线性表下标的合法范围是1到L.length。
L.elem[j+1]=L.elem[j]; //注意:线性表中数组的下表为0到L.length-1。
}//注意i-1。
L.elem[i-1]=e;
L.length++;
return 1;
}

线性表的删除:
线性表的删除写成函数需要传入的参数:线性表、需要删除的元素的位置。
int ListDelete(SqList &L,int i)//传入的线性表因为长度的改变所以要用引用参数。
{
if(i<=0||i>L.length||L.length>MAXSIZE) return 0;//该处为判满以及数据是否合法
int j;
for(j=i;j<L.length;j++){
L.elem[i-1]=L.elem[i];//将所求位置后的元素往前移,覆盖即可。
}
L.length–;
return 1;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值