#include <stdio.h>
#include <stdlib.h>
#define LISTSIZE 10 //顺序表存储空间的初始分配量
#define LISTINCREMENT 5 //顺序表分配空间的分配增量
typedef struct
{
int *elem;
int length;
int listsize;
} Sqlist;
int main()
{
Sqlist l;
int i, e, m;
void initlist(Sqlist * l);
void showlist(Sqlist * l);
int listinsert(Sqlist * l, int i, int e);
int listdelete(Sqlist * l, int i);
initlist(&l);
for (i = 0; i < l.listsize; i++)
{
l.elem[i] = i + 1;
l.length++;
}
printf("sqlist:");
showlist(&l);
printf("请属于你想插入的位置i, 和元素值e:\n");
scanf("%d %d", &i, &e);
listinsert(&l, i, e);
printf("\ninsqlist:");
showlist(&l);
printf("\n");
printf("请属于你想删除的位置i:\n");
scanf("%d", &i);
listdelete(&l, i);
printf("\nDeleted element:e=%d\n", e);
printf("\ndesqlist:");
showlist(&l);
printf("\n");
return 0;
}
//初始化顺序表
void initlist(Sqlist *l)
{
l->elem = (int *)malloc(LISTSIZE * sizeof(int));
if (l->elem)
{
l->length = 0;
l->listsize = LISTSIZE;
}
else
printf("ERROR!内存分配失败\n");
}
//输出顺序表
void showlist(Sqlist *l)
{
int m;
for (m = 0; m < l->length; m++)
printf("%d,", l->elem[m]);
printf("\n");
}
//顺序表的插入
int listinsert(Sqlist *l, int i, int e)
{
int *p, *q, *newbase;
printf("\n在第%d个位置上,插入元素e=%d\n", i, e);
if (i < 0 || i > l->length + 1)
{
printf("i值不合法!\n");
return -1;
}
if (l->length >= l->listsize)
{
newbase = (int *)realloc(l->elem, (l->listsize + LISTINCREMENT) * sizeof(int));
if (newbase)
{
l->elem = newbase;
l->listsize += LISTINCREMENT;
}
q = l->elem + i - 1;
for (p = l->elem + l->length - 1;
q <= p; p--)
*(p + 1) = *p;
*q = e;
l->length++;
}
else
printf("ERROR!分配内存失败\n");
return 0;
}
//顺序表的删除
int listdelete(Sqlist *l, int i)
{
int m, e;
int *q, *p;
printf("\n删除第%d个位置上的元素\n", i);
if (i < 0 || i > l->length + 1)
{
printf("i值不合法!/n");
return -1;
}
p = l->elem + i - 1;
e = *p;
for (q = l->elem + l->length - 1; q >= p; p++)
*p = *(p + 1);
l->length--;
return e;
}
c语言实现顺序表的创建、插入和删除(函数版 )
于 2022-03-31 18:34:56 首次发布