代码
#include <stdio.h>
#include <malloc.h>
#define MaxSize 10
typedef struct SequentialList
{
int length;
int maxsize;
int *data;
}List;
void ListPrint(List *L)
{
if (L->length == 0)
{
printf("this list is empty!\n");
}
int i=0;
for ( i = 0; i < L->length; i++)
{
printf("%d-->",L->data[i]);
}
printf("end\n");
} //打印顺序表
void InitList(List *L)
{
L->length = 0;
L->maxsize = MaxSize;
L->data = (int*)malloc(sizeof(int) * MaxSize);
} //初始化顺序表
void ListInsert(List *L,int i,int e)
{
//step1:判断插入是否合法
if(i<1||i>L->length+1)
{
printf("Can not insert element\n");
}
//step2:将第i位及以后的元素后移一位
int j;
for(j=L->length;j>=i;j--)
{
L->data[j]=L->data[j-1];
}
//step3:将新元素插入
L->data[i-1] = e;
//step4:表长加一
L->length++;
} //插入新元素
void ListDelete(List *L,int i,int* e)
{
//step1:判断操作合法性
if(i<1||i>L->length+1)
{
printf("Can not delete element\n");
}
if(L->length<=0)
{
printf("this list is empty!\n");
}
//step2:将要删除的位的元素传给e
*e = L->data[i-1];
//step3:将第i位元素及以后元素前移一位
int j;
for(j=i;j<L->length;j++)
{
L->data[j-1]=L->data[j];
}
//step4:表长减一
L->length--;
} //删除元素
int ListFind(List L,int num)
{
int i;
for(i=0;i<L.length;i++)
{
if(L.data[i]==num)
{
return i+1;
}
}
return -1;
} //按值查找
void IncreaseSize(List *L,int len)
{
//step1:生成一个指向原来顺序表的储存空间的一个指针
int *p = L->data;
//step2:为顺序表开辟一个更大的空间
L->data = (int*)malloc(sizeof(int)*(L->maxsize+len));
//step3:转移数据
int i;
for(i=0;i<L->length;i++)
{
L->data[i] = p[i];
}
//step4:修改顺序表长度
L->maxsize+=len;
//step5:释放原来的储存空间
free(p);
} //扩容
int main()
{
List L;
InitList(&L);
printf("%d\n", L.maxsize);
ListInsert(&L,1,1);
ListInsert(&L,2,2);
ListInsert(&L,3,3);
ListInsert(&L,4,4);
ListInsert(&L,5,5);
ListInsert(&L,6,65);
ListInsert(&L,7,7);
ListInsert(&L,8,8);//插入元素
ListPrint(&L);//打印顺序表
int e;
ListDelete(&L,6,&e);
printf("e=%d\n",e);
ListPrint(&L);//打印顺序表
printf("L'7 is %d\n",ListFind(L,7));//查找元素7
IncreaseSize(&L,30);//扩容
ListPrint(&L);//打印顺序表
printf("L'maxsize is %d\n",L.maxsize);//检查扩容是否成功
return 0;
}
运行结果
代码功能
顺序表初始化
顺序表插入元素
顺序表删除元素
顺序表按值查找
顺序表扩容
打印顺序表