数据结构(一)顺序表(学习ing)

  • 定义结构
  • 创建顺序表
  • 初始化顺序表
  • 插入元素
  • 删除元素
  • 销毁顺序表

定义结构

//定义结构
typedef int SeqType;//存储单元类型
typedef struct
{
    SeqType *elem;//存储空间基地址(类似数组首地址)
    int length;//当前长度
    int listsize;//当前分配的存储容量
}SqList;

typedef 用法:定义一种类型的别名,而不是简单的宏的替换,可以用作同时声明指针型的多个对象。

                       用typedef定义与平台无关的类型。

                       为复杂的声明定义一个新的简单的别名。(详细可参考http://blog.csdn.net/superhoy/article/details/53504472)


 

定义操作

创建顺序表

/*
*创建顺序表
*/
SqList(creatList_sq)()
{
    SqList *List = (SqList *)malloc(sizeof(SqList));
    return *List;
}

初始化顺序表

/*
*初始化顺序表
*返回1,表示初始化成功
*返回0,表示初始化失败
*/
int initList_sq(SqList &L)
{
    L.elem = (SeqType *)malloc(sizeof(SeqType)*LIST_INIT_SIZE);
    if(!L.elem)
        return 0;//内存分配失败,储存空间不够
    L.length = 0;//表示顺序表为空
    L.listsize = LIST_INIT_SIZE;//表示顺序表里,最大存储单元个数
    return 1;
}

插入元素

/*
*插入顺序表
*下标是负数就插入到结尾
*/
int insert_sq(SqList &L,inr index,SeqType val)
{
    if(index>L.length)
    {
        //存储的下表超出顺序表的实际长度
        printf("存储的下表超出顺序表的实际长度");
        return 0;
    }
    if(index<0)//下标是负数,插入到结尾
    {
        index=L.length;
    }
    if(L.length==L.listsize)
    {
        //顺序表的存储单元已经存满,将继续分配新的存储单元
        SeqType* newBase = (SeqType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(SeqType));//继续分配存储单元
        if(!newBase){
            //分配内存单元失败
            return 0;
        }
        L.elem=newBase;
        L.listsize +=LISTINCREMENT;
    }
    //寻找合适的插入位置,index后面的元素向后移动
    for(int i=L.length;i>index;i--){
        L.elem[i]=L.elem[i-1];//向后移动
    }
    L.elem[index]=val;//插入元素
    L.length++;
    return 1;
}
//realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。

参考博客:https://blog.csdn.net/flueky/article/details/52711668

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