问题描述:
实现可变长顺序表的建表过程。任务要求:通过顺序表的初始化、插入算法,实现顺序表的建表,并依次输出顺序表元素。
【输入形式】
第一行输入整数N(1<=N<=100),表示创建长度为N的顺序表;
第二行输入N个整数,表示顺序表的N个元素,依次放入表中;
【输出形式】
依次输出顺序表的全部元素。(以空格分隔)
【样例输入】
5
1 2 3 4 5
【样例输出】
1 2 3 4 5
实现可变长顺序表要定义:初始的存储空间空间(INIT_SIZE)和空间再分配的增量大小(INCREN)
#include#include #define INIT_SIZE 5 //初始分配的存储空间长度 #define INCREM 3 //存储空间再分配的增量 #define OK 1 #define ERROR 0
下面定义结构体类型
typedef int ElemType;
typedef struct Sqlist{
ElemType *slist;
int length;
int listsize;
}Sqlist;
顺序表的初始化
int initSq(Sqlist *L)
{
L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
if(!L->slist)return 0; //初始化失败返回0
L->length=0; //置为空表长度为0
L->listsize=INIT_SIZE; //设置初始空间容量
return 1;
}
接下来是插入和删除操作
int insertSq(Sqlist *L, int i,ElemType e)
{
if(i<0||i>L->length+1)return 0; //插入位置不正确返回0
if(L->length+1>L->listsize) //当前储存空间已满,进行空间增量
{
L->slist=(ElemType*)realloc(L->slist,(L->listsize+INCREM)*sizeof(ElemType));
if(!L->slist)return 0; //申请存储空间失败
L->listsize+=INCREM;
}
int j;
for(j=L->length;j>i;j--) //插入位置后数据元素依次后移
{
L->slist[j]=L->slist[j-1];
}
L->slist[i]=e; //插入新数据元素
L->length++; //当前表长加一
return 1;
}
void printSq(Sqlist *L)
{
int i;
for(i=0;ilength;i++)
{
printf("%d ",L->slist[i]); //依次输出表中元素
}
printf("n");
}
最后实现完整代码查看结果
#include#include #define INIT_SIZE 5 //初始分配的存储空间长度 #define INCREM 3 //存储空间再分配的增量 #define OK 1 #define ERROR 0 typedef int ElemType; typedef struct Sqlist{ ElemType *slist; int length; int listsize; }Sqlist; int initSq(Sqlist *L) { L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType)); if(!L->slist)return 0; //初始化失败返回0 L->length=0; //置为空表长度为0 L->listsize=INIT_SIZE; //设置初始空间容量 return 1; } int insertSq(Sqlist *L, int i,ElemType e) { if(i<0||i>L->length+1)return 0; //插入位置不正确返回0 if(L->length+1>L->listsize) //当前储存空间已满,进行空间增量 { L->slist=(ElemType*)realloc(L->slist,(L->listsize+INCREM)*sizeof(ElemType)); if(!L->slist)return 0; //申请存储空间失败 L->listsize+=INCREM; } int j; for(j=L->length;j>i;j--) //插入位置后数据元素依次后移 { L->slist[j]=L->slist[j-1]; } L->slist[i]=e; //插入新数据元素 L->length++; //当前表长加一 return 1; } void printSq(Sqlist *L) { int i; for(i=0;i length;i++) { printf("%d ",L->slist[i]); //依次输出表中元素 } printf("n"); } int main() { Sqlist sq; ElemType e; int n; if(initSq(&sq)){ scanf("%d",&n); int i; for(i=0;i 运行结果



