#include<stdio.h>
#include<stdlib.h>
typedef struct linearlist
{
int *list;
int size;//元素个数
int maxsize;//元素个数最大值
} lili;//定义一个结构体并起别名为lili
void initlist (lili*L,int ms)
{
if((L->list=(int*)calloc(ms,sizeof(int*)))==NULL)//给list分配内存,要记得free
{
printf("内存申请错误!\n");
exit(1);
}
L->size=0;
L->maxsize=ms;
}
int insertlist(lili*L,int item,int rc)//rc代表下标
{
int i;
if(L->size==L->maxsize)//线表已满
return -1;
if(rc<0)//位置不合法
rc=0;
if(L->maxsize>rc>=L->size)//若位置rc+1(下标为rc)还没有值,则直接将item放入该位置
rc=L->size;
for(i=L->size-1;i>=rc;i--)/*size-1变为最后一个元素的下标,从最后
一个(下标为n-1),移到下标为n,依此类推至将第rc+1个元素(下标为rc)移到下标为rc+1的位置上*/
L->list[i+1]=L->list[i];
L->list[rc]=item;//第rc+1个元素
L->size++;
return 1;
}
void outputlist(lili*L)
{
int i;
for(i=0;i<L->size;i++)
printf("%d",L->list[i]);
printf("\n");
}
int findlist(lili *L,int item)
{
int i;
for(i=0;i<L->size;i++)
if(L->list[i]==item)
return i;
return -1;
}
int deletelist1(lili*L,int item)
{
int i,n;
for(i=0;i<L->size;i++)//循环一遍看看是否有item这个元素,并定位它的下标
if(item==L->list[i])
break;
if(i<L->size)//说明找到了
{
for(n=i;n<L->size-1;n++)/*从item的下标(n)到最后一个下标,将下标n+1的值移动
到下标n中,以此类推至将下标为size-1(最后一个下标)的值移动到它前面一个位置*/
L->list[n]=L->list[n+1];
L->size--;//线表大小减一
return i;
}
return -1;
}
int dele2list(lili *L,int rc)
{
int n;
if(rc<0||rc>L->size)
return -1;
for(n=rc;n<L->size-1;n++)
L->list[n]=L->list[n+1];
L->size--;
return 1;
}
void main()
{
lili LL;
int i, r;
printf( "list addr=%p\tsize=%d\tMaxSize=%d\n", LL.list, LL.size,LL.maxsize);
initlist( &LL, 100 );
printf( "list addr=%p\tsize=%d\tMaxSize=%d\n", LL.list, LL.size,LL.maxsize);
while( 1 )
{
printf( "请输入元素值,输入0结束插入操作:" );
fflush( stdin );
scanf("%d",&i);
if(i==0)
break;
printf( "请输入插入位置" );
scanf( "%d", &r );
insertlist(&LL, i, r-1);
printf( "线性表为: " );
outputlist( &LL );
}
while( 1 )
{
printf( "请输入查找元素值,输入0结束查找操作:" );
fflush( stdin );
scanf( "%d", &i );
if( i == 0 )
break;
r = r = findlist( &LL, i );
if( r < 0 )
printf( "没找到\n" );
else
printf( "有符合条件的元素,位置为:%d\n", r+1 );
}
while( 1 )
{
printf( "请输入删除元素值,输入0结束查找操作:" );
fflush( stdin );
scanf( "%d", &i );
if( i == 0 )
break;
r = r = deletelist1( &LL, i );
if( r < 0 )
printf( "没找到\n" );
else {
printf( "有符合条件的元素,位置为:%d\n线性表为:", r+1 );
outputlist( &LL );
}
}
while( 1 )
{
printf( "请输入删除元素位置,输入0结束查找操作:" );
fflush( stdin );
scanf( "%d", &r );
if( r == 0 )
break;
i = i = dele2list( &LL, r-1 );
if( i < 0 )
printf( "位置越界\n" );
else {
printf( "线性表为:" );
outputlist( &LL );
}
}
}
这是我根据书上的练习题写的,希望对大家有帮助,不懂的或者我有写错的地方可以在评论区留言,看到会回复,我也只是个小白,努力进步ing!!