#include<stdio.h>
#include<stdlib.h>
#define initsize 10
#define addsize 10
typedef struct{
int *q;
int length;
int maxsize;
}sl;
void init_sl(sl *l)
{
int *p1=(int *)malloc( sizeof(int) * initsize);
if(p1==NULL)
{
printf("init failed\n");
return ;
}
l->q=p1;
l->maxsize=initsize;
l->length=0;
}
void addsize_sl(sl *l)
{
int i;
int *p2=l->q;
int *p3=(int*)malloc(sizeof(int)*(initsize+addsize)) ;
if(p3==NULL)
{
printf("failed \n");
return ;
}
l->q=p3;
for(i=0;i<l->length;i++)
{
l->q[i]=p2[i];
}
l->maxsize=initsize+addsize;
}
void addelem(sl *l,int elem,int i)
{ int j;
if( (i<1) ||(i>l->length+1) )
{
printf("i is bad\n");
return ;
}
if((l->length>=l->maxsize))
{
addsize_sl(l);
}
for(j=l->length;j>=i;j--)
{
l->q[j]=l->q[j-1] ;
}
l->q[i-1]=elem;
l->length++;
}
void delete_sl(sl*l,int i)
{ int j;
if((i<1) ||(i>l->length))
{
printf("bad position\n");
return ;
}
for(j=i-1;j<l->length;j++)
{
l->q[j-1]=l->q[j];
}
l->length--;
}
void display(sl*l)
{
int j;
for(j=0;j<l->length;j++)
{
printf("%4d",l->q[j]);
}
printf("\n");
}
void turnover(sl*l)
{
int i=0,j=0,temp=0;
if(l->length>0)
{
i=0;
j=l->length-1;
while(i<=j)
{
temp=l->q[i];
l->q[i]=l->q[j];
l->q[j]=temp;
i++;
j--;
}
}
}
int main()
{
int j;
sl L;
int num;
init_sl(&L);
for(j=1;j<6;j++)
{
printf("enter a num\n");
scanf("%d",&num);
addelem(&L,num,j);
}
display(&L);
delete_sl(&L,3);
display(&L);
turnover(&L);
display(&L);
return 0;
}
线性表顺序存储动态分配
最新推荐文章于 2024-07-15 17:15:24 发布