1.操作静态顺序表
//插入
void InsertElem(int sqlist[], int *len , int i, int a)
{
int t;
if ((i<1 ) || (i>*len +1 ) || (*len == MAXSIZE)) //超出删除范围
{
printf ("\nillegal\n" );
return ;
}
for (t = *len - 1 ; t >= i-1 ; t--)
{
sqlist[t + 1 ] = sqlist[t]; // 从最后一个元素开始依次向后移动一位,直到移动完成要插入的位置的元素
}
sqlist[i - 1 ] = a;
(*len )++;
}
//删除
void DelElem(int sqlist[], int *len , int i)
{
int t;
if ((i<0 ) || (i>*len ))
{
printf ("\nillegal\n" );
return ;
}
for (t = i; t <= *len - 1 ; t++)
{
sqlist[t - 1 ] = sqlist[t]; // 从将要删除的元素的位置的下一个位置开始,将元素依次向前移动一位
}
(*len )--;
}
int main()
{
int sqlist[MAXSIZE];
int len = 6 ;// 初始表长度;
int i;
printf ("current numbers:>" );
for (i = 0 ; i < len; i++)
{
sqlist[i] = i + 1 ;
printf ("%d " , sqlist[i]);
}
printf ("\ncurrent length:%d " ,len);
printf ("\n在第3个位置插入0:" );
InsertElem(sqlist, &len, 3 , 0 );
for (i = 0 ; i < len; i++)
printf ("%d " , sqlist[i]);
printf ("\ncurrent length:%d " , len);
printf ("\n在第11个位置插入元素:\n" );
InsertElem(sqlist, &len, 11 , 0 );
printf ("\n删除第3个元素:" );
DelElem(sqlist, &len, 3 );
for (i = 0 ; i < len; i++)
printf ("%d " , sqlist[i]);
printf ("\ncurrent length:%d " , len);
printf ("\n删除第11个元素:" );
DelElem(sqlist, &len, 11 );
system ("pause" );
return 0 ;
}
2.操作动态顺序表
//创建
typedef struct sqlist
{
int *elem ;
int length ;// 当前表长
int listsize;// 当前表的最大长度
}sqlist;
// 初始化
void InitSqlist(sqlist *L )
{
L->elem = (int *) malloc(MAXSIZE*sizeof (int ));// 开辟能存放最大元素个数的空间
if (L->elem == NULL)
{
perror("error:" );
return ;
}
L->length = 0 ;
L->listsize = MAXSIZE;
}
//插入
void InsertElem(sqlist *L , int i, int a)
{
int *base = NULL;
int *insertptr = NULL;
int *p = NULL;
if ((i < 1 ) || (i > L->length + 1 ))
{
printf ("illegal" );
return ;
}
if (L->length >= L->listsize)
{
base = (int *) realloc(L->elem, (L->listsize + 10 )*sizeof (int ));
if (base == NULL)
{
free(L->elem);
return ;
}
else
{
L->elem = base;
L->listsize = L->listsize + 10 ;
}
}
insertptr = &(L->elem[i - 1 ]);// 当前要插入的元素的位置
for (p = &(L->elem[L->length - 1 ]); p >= insertptr; p++)
*( p + 1 ) = *p ;
*insertptr = a;
(L->length )++;
}
//删除
void DelElem(sqlist *L , int i)
{
int *p ;
if ((i<0 ) || (i > L->length ))
{
printf ("illegal" );
return ;
}
for (p = &(L->elem[i]); p <= &(L->elem[L->length - 1 ]); p++)
*( p - 1 ) = *p ;
(L->length )--;
}
int main()
{
sqlist l;
int i;
InitSqlist(&l);// 初始化顺序表l
for (i = 0 ; i < 15 ; i++)//插入15 个元素
InsertElem(&l, i + 1 , i + 1 );
printf ("current elements:" );
for (i = 0 ; i < l.length ; i++)
printf ("%d " , l.elem[i]);
DelElem(&l, 3 );// 删除第3 个元素
printf ("\n删除第3个元素:" );
for (i = 0 ; i < l.length ; i++)
printf ("%d " , l.elem[i]);
printf ("\n删除第16个元素:" );
DelElem(&l, 16 );// 非法删除
system ("pause" );
return 0 ;
}