可变长顺序表

使用动态数组

头文件:SeqList.h

#include<stdio.h>

#include<stdlib.h>


#define LIST_INTT_SIZE 100 //线性表存储空间的初始化分配量
#define LISTINCREMENT 10    //线性表存储空间的分配量

typedef int DataType; //存储单元类型


typedef struct
{
DataType *elem; //存储空间基址
int length; //当前长度
int listsize; //当前分配的存储容量----(以sizeof(DataType)we为单位)
}SqList;


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


//初始化顺序表
//返回1表示初始化成功
//返回0表示初始化失败


int InitateSqList(SqList* L)
{
L->elem = (DataType*)malloc(sizeof(DataType)*LIST_INTT_SIZE); //创建动态数组并把地址赋给顺序表基址
if(!L->elem)
return 0;
L->length = 0; //空表长度为0
L->listsize = LIST_INTT_SIZE; //初始存储容量
return 1;
}


//插入函数
int InsertSqList(SqList* L,int i,DataType d)
{
int j;
if(i<0)
{
printf("i值不合法!");
return 0;
}
if(L->length == L->listsize) //当前存储空间已满,增加分配
{
DataType* newbase = (DataType*)realloc(L->elem,sizeof(DataType)*(L->listsize + LISTINCREMENT));
if(!newbase) //存储分配失败
{
printf("存储分配失败!");
return 0;
}
L->elem = newbase; //新基址
L->listsize += LISTINCREMENT; //增加容量
printf("分配空间成功!");
}

for(j = L->length;j>i;j++)
L->elem[j] = L->elem[j-1];
L->elem[i] = d; //插入d
L->length++; //元素个数加1
return 1;
}
//删除函数
int DeleteSqList(SqList* L,int i,DataType *d)
{
int j;
if(L->length<0)
{
printf("顺序表为空,无数据元素可删!");
return 0;
}
else if(i<0 || i>L->length)
{
printf("i值不合法!");
return 0; //i值不合法
}
else
{
*d = L->elem[i]; //保存删除的元素到d中
//从前向后依次前移
for(j=i+1;j<=L->length-1;j++)
L->elem[j-1] = L->elem[j];
L->length--;
return 1;
}



}
//取数据元素
int GetSqList(SqList L,int i,DataType *d)
{
if(i<0 || i>L.length)
{
printf("参数i不合法!\n");
return 0;
}
else
{
*d = L.elem[i];
return 1;
}
}
//求数据元素个数
int CountSqList(SqList* L)
{
int i;
int count = 0;
for(i=0;i<=L->length;i++)
count++;
return count;

}


//测试函数

#include"SeqList.h"
int main()

{

    int i,d,count;

    SeqList list = CreateSqList();

    InitateSqList(&list);

    for(i = 0;i<300;i++)

        InsertSqList(&list;i,i+1);

    printf("\n");

    DeleteSqList(&list,100,&d);

    for(i = 0;i<200;i++)

    {

        printf("%d\t",list.elem[i]);

        if((i+1)%5 == 0)

        printf("\n");

    }

    printf("测试行*********************");

    GetSqList(list,99,&d);

    printf("%d\n",d);

    count = CountSqList(&list);

    printf("%d\n",count);

    return 0;

}

猜你喜欢

转载自blog.csdn.net/asdn_123/article/details/80941241