数据结构之顺序表的创建、插入、删除、定位

线性表的基本操作

  • 初始化-构建一个空的线性表
    SqListInit(SqList *L)

  • 插入-在线性表的第i个元素之前插入一个新的元素
    SqListInsert(SqList *L,int i,int e)

  • 删除-删除第i个元素
    SqListDelete(SqList *L,int i,int *e)

  • 定位-求指定元素的位置
    SqListLocate(SqList *L,int e)

    具体实现

  • 线性表存储结构描述(结构体)

#define INIT_SIZE 100
#define INCREMENT 10

typedef struct
{
    int *elem;
    int length;
    int listsize;
}SqList;
  • 初始化
int SqListInit(SqList *L)
{
    L->elem=(int *)malloc(INIT_SIZE*sizeof(int));   //初始化存储空间
    if(!L->elem)
        return 0;
    L->length=0;
    L->listsize=INIT_SIZE;   //空间增长步长
    return 1;
}
  • 插入
int SqListInsert(SqList *L,int i,int e)
{
    int j;
    int *newbase;
    if(i<1 || i>L->length+1)   //插入位置不合法
        return 0;
    if(L->length>=L->listsize)   //当前存储空间已满
    {
        //再次分配空间
        newbase=(int *)realloc(L->elem,(L->listsize+INCREMENT)*sizeof(int));
        if(!newbase)   //存储分配失败的话
            return 0;
        L->elem=newbase;
        L->listsize +=INCREMENT;
    }
    for(j=L->length-1;j>=i-1;j--)   //插入位置及以后的元素依次后移
    {
        L->elem[j+1]=L->elem[j];
    }
    L->elem[i-1]=e;   //插入e
    ++L->length;   //顺序表长加1
    return 1;
}
  • 删除
int SqListDelete(SqList *L,int i,int *e)
{
    int j;
    if(i<1 || i>L->length)   //删除位置不正确
        return 0;
    *e=L->elem[i-1];   //被删除元素的值赋给e
    for(j=i-1;jlength-1;j++)   //删除后元素依次前移
    {
        L->elem[j]=L->elem[j+1];
    }
    --L->length;   //表长减1
    cout<<"顺序表中位置为"<"的值"<<*e<<"已被删除"<return 1;
}
  • 定位
int SqListLocate(SqList *L,int e)
{
    int i;
    while(i<=L->length&&L->elem[i-1]!=e)
        i++;
    if(i<=L->length)
    {
        cout<<"元素"<"在顺序表中的位置是"<return 1;
    }
    else
    {
        cout<<"顺序表中不存在等于"<"的元素"<return 0;
    }
}

源码链接http://download.csdn.net/detail/qq_28397005/9812282
转载请声明,谢谢!

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