线性表—顺序表基础知识

线性表(List):零个或多个数据元素的有限序列。

线性表有n(n>=0)个元素,n也是线性表的长度。当n=0时,线性表称为空表。
在这里插入图片描述

四个特点:

   1. 集合中必存在唯一的一个“第一元素”。
   2. 集合中必存在唯一的一个 “最后元素” 。
   3. 除最后一个元素之外,均有唯一的后继(后件)。
   4. 除第一个元素之外,均有唯一的前驱(前件)。

线性表的抽象数据类型

定义及操作:
ADT 线性表
(List)
Date
线性表的数据对象集合为{a1,a2,…,an},每个元素的类型均为DateType。其中,除第一个元素a1外,每一个元素有且只有一个直接前驱元素,除了最后一个元素an外,每一个元素有且只有一个直接后继元素。数据元素之间的关系是一对一的关系。
基本操作

在这里插入图片描述

线性表的顺序存储结构

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
在这里插入图片描述

地址计算

由于C语言中的数组是从 0 开始的,所以对应关系如下图:
在这里插入图片描述
假设元素占用了C个存储单元,那么线性表中第 i 个数据元素 ai 的存储位置由 a1 可以得到:

                    LOC(ai)= LOC(a1)+(i - 1)*C  

基本操作实现

  1. 初始化
int InitList(SqList &L)
{
    L.elem =  ElemType[MAX];
    if (!L.elem)
    {
        return -1;
    }
    L.length = 0; 
    return 0;
}
  1. 销毁
void DestroyList(SqList &L)
{
   if(L.elem)
   {
    delete [] L.elem;
   }
}
  1. 查找(LocateElem)
    从第一个元素a1开始依次和x比较,若相等,则返回该元素的下标。
int LocateElem(Sqlist L,Elemtype e)
{
  for(i=0;i<L.Length;i++)
  {
   if(L.elem[i]==e)
   {
   return i;
   }
  }
  return 0;
}

查找(GetElem)

Status GetEelm(SqList L,ElemType *e)
{
  if(L.length==0||i<1||i>L.length)
  {
  return -1;
  }
  *e=L.elem[i-1];
  return 0;
}
  1. 插入
Status ListInsert(SqList &L,ElemType e)
{
 if(i<1||i>L.length+1;i++)
 {
 return -1;
 }
 if(L.length==MAX)
 {
 return -1;
 }
 if(i<=L.length)
 {
    for(i=l.length-1;i>=i-1;i--)
    {
   L.elem[j+1]=L.elem[j];
    }
  }
 L.elem[i-1]=e;
 L.length++;
 return 0;
}
  1. 删除
Status ListDelete(SqList L,ElemType *e)
{
int k;
if(L.length==0)
return -1;
if(i<1||i>L.length)
return -1;
*e=L.elem[i-1];
if(i<L.length)
{
 for(k=i;k<L.length;k++)
 {
 L.elem[k-1]=L.elem[k];
 )
 L.length--;
 }
 return 0;
}
  1. 求长
int GetLength(SqList L)
{
return (L.length);
}

文章参考《大话数据结构》

发布了2 篇原创文章 · 获赞 11 · 访问量 3358

猜你喜欢

转载自blog.csdn.net/weixin_46153942/article/details/104019561