#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAXSIZE 15
typedef int Elemtype;
typedef struct
{
Elemtype *data;
int length;
int listsize;
}Lnode;
void Initlnode(Lnode **s)
{
puts("初始化顺序表:");
*s=(Lnode*)malloc(sizeof(Lnode));
(*s)->data=(Elemtype*)malloc(MAXSIZE*sizeof(Elemtype));
(*s)->length=MAXSIZE;
(*s)->listsize=0;
}
//i基于位置顺序(1~s->listsize+1),非基于下标
void Insertlnode(Lnode *s,int i,Elemtype e)
{
int m;
if(s->listsize>=s->length)
{
printf("顺序表空间已不足\n");
}
else if(i<1 || i>s->listsize+1)
{
printf("WRONG!\n");
}
else
{
for(m=s->listsize-1;m>=i-1;m--)
s->data[m+1]=s->data[m];
s->data[i-1]=e;
s->listsize++;
}
}
void Output(Lnode *s)
{
for(int i=0;i<s->listsize;i++)
printf("%d%c",s->data[i],(s->listsize-1==i ? '\n' : ' '));
}
void Free(Lnode *s)
{
if(s->data)
free(s->data);
if(s)
free(s);
}
//i基于位置顺序(1~s->listsize),非基于下标
void Delete(Lnode *s,int i)
{
int n;
if(s->listsize<=0)
{
printf("顺序表已空\n");
}
else if(i<1 || i>s->listsize)
{
printf("WRONG!\n");
}
else
{
for(n=i-1;n<s->listsize;n++)
s->data[n]=s->data[n+1];
s->listsize--;
}
}
void InsertTest(Lnode *s,int insloc,Elemtype e)
{
printf("在第%d个位置插入1个元素%d后:\n",insloc,e);
Insertlnode(s,insloc,e);
Output(s);
printf("容量:%d,当前长度:%d\n",s->length,s->listsize);
printf("\n");
}
void DeleteTest(Lnode *s,int delloc)
{
printf("删除第%d个元素后:\n",delloc);
Delete(s,delloc);
Output(s);
printf("容量:%d,当前长度:%d\n",s->length,s->listsize);
printf("\n");
}
void cls(Lnode *s)
{
printf("按回车键清屏:");
scanf("%*[^\n]");
getchar();
system("cls");
printf("容量:%d,当前长度:%d\n",(*s).length,(*s).listsize);
printf("\n");
}
void Test(Lnode *s)
{
int n,t;
//删除第3个元素(下标为2的元素)
n=3;
DeleteTest(s,n);
//删除第0个元素
n=0;
DeleteTest(s,n);
//删除第s->listsize+1个元素
n=s->listsize+1;
DeleteTest(s,n);
//删除第1个元素
n=1;
DeleteTest(s,n);
//删除第s->listsize个元素
n=s->listsize;
DeleteTest(s,n);
srand(time(NULL));
//插入5个元素
for(n=0;n<5;n++)
{
t=rand()%(s->length+1)+1;
InsertTest(s,t,rand());
}
//填满所有剩余空间
while(s->listsize<s->length)
{
t=rand()%(s->length+1)+1;
InsertTest(s,t,rand());
}
//再尝试插入5个元素(在空间已不足的基础上)
for(n=0;n<5;n++)
{
t=rand()%(s->length+1)+1;
InsertTest(s,t,rand());
}
//删除所有元素
while(s->listsize>0)
DeleteTest(s,1);
cls(s);
//再尝试删除5个元素(在顺序表已空的基础上)
puts("再尝试删除5个元素:");
for(n=0;n<5;n++)
{
t=rand()%s->length+1;
DeleteTest(s,t);
}
cls(s);
//重新插入5个元素(在空顺序表的基础上)
puts("重新插入5个元素:");
while(s->listsize<s->length && s->listsize<5)
{
t=rand()%(s->length+1)+1;
InsertTest(s,t,rand());
}
}
int main()
{
const float Factor=0.65;
Lnode *s;
int n;
Initlnode(&s);
for(int i=0;i<s->length*Factor;i++)
Insertlnode(s,i+1,i+1);
Output(s);
printf("容量:%d,当前长度:%d\n",s->length,s->listsize);
printf("\n");
Test(s);
Free(s);
return 0;
}
温馨提示:答案为网友推荐,仅供参考