使用动态数组
头文件:SeqList.h
#include<stdio.h>
#include<stdlib.h>
#define LISTINCREMENT 10 //线性表存储空间的分配量
typedef int DataType; //存储单元类型
{
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;
}