数据结构—线性表

线性表示一种最简单的线性结构,线性的主要操作特点是可以在任意位置插入和删除一个数据元素

  • 线性表:顺序存储结构,链式存储结构;
  • 顺序存储结构:实现的链表称为顺序表
  • 链式催促结构:实现的链表称为链表—>”单链表,循环单链表和双向循环链表”;

1.线性表的抽象数据类型

抽象数据类型是指一个逻辑概念上的类型和这个类型上的操作集合,而类型是一组值得集合。因此线性表的抽象数据类型主要包括:数据集合和数据集合上的操作集合

  1. 数据集合
    线性表的数据集合可以表示为a0,a1,……an-1,类型为DataType;

  2. 操作集合
    首先定义结构体Seqlist:

typedef struct
{
    DataType list[MaxSize];
    int size;
}Seqlist;
  • 其中DataType为数组的数据类型,MaxSize表示数组元素的最大个数,list表示数组名,size表示顺序表当前存储的数据元素个数,且满足条件size<=Maxsize,Seqlist是结构体名。

    (1).初始化ListInitiate(L)

void ListInitiate(Seqlist *p)      //初始化顺序表L
{
    l->size=0;                     //定义初始数据元素个数,指针类型可以返回值
}

(2)求当前数据元素个数ListLength(L)

int listLength(SeqList L)       //返回顺序表L的当前数据元素个数
{
    return L.size;
}

(3)插入数据元素个数ListInsert(L,i,x)

int ListInsert(Seqlist *L,int i,DataType x)//在顺序表L的第i(0<=i<=size)个位置插入数据元素x
{                                          //插入成功返回1,失败返回0;
    int j;
    if(L->size>=Maxsize)
    {
        printf("顺序表已满,无法插入!\n");
        return 0;
    }
    else if(i<0||i>L->size)
    {
        printf("参数i不合法!\n");
        return 0;
    }
    else
    {
        for(j=L->size;j>i;j--)//从后往前依次后移数据,为插入做准备
        {
            L->List[j]=L->List[j-1];
        }
        L->List[i]=x;      //插入x
        L->size++;         //元素个数加1
        return 1;
    }
}

(4)删除数据元素ListDelete(L,i,x)

int ListDelete(Seqlist *L,int i,Datatype *x)
{
    int j;
    if(L->size<=0)
    {
        printf("顺序表已空,无数据可以删!\n");
        return 0;
    }
    else if(i<0||i>L->size-1)
    {
        printf("参数i不合法!\n");
        return 0;
    }
    else
    {
        *x=L->List[i];
        for(j=i+1;j<=L->size-1;j++)
        {
            L->List[j-1]=L->List[j];
        }
        L->size--;
        return 1;
    }
}

(5)取数据元素ListGet(L,i,x)

int ListGet(SeqList L,int i,DataType *x)  //取顺序表L中的第i个元素存于x中,成功返回1,失败返回0
{
    if(i<0||i>L->size-1)
    {
        printf("参数i不合法!\n");
        return 0;
    }
    else
    {
        *x=L.list[i];
        return 1;
    }
}

你可能感兴趣的:(数据结构)