#include <stdio.h>
#include <stdlib.h>
#define LISTSIZE 10 //顺序表存储空间的初始分配量
#define LISTINCREMENT 5 //顺序表分配空间的分配增量
typedef struct
{
int *elem;
int length;
int listsize;
} sqlist;
main()
{
sqlist l;
int i, e, m;
int *p, *q, *newbase;
l.elem = (int *)malloc(LISTSIZE * sizeof(int));
if (l.elem)
{
l.length = 0;
l.listsize = LISTSIZE;
}
else
printf("ERROR!内存分配失败\n"); //线性表的初始化
for (i = 0; i < l.listsize; i++)
{
l.elem[i] = i + 1;
l.length++;
} //给顺序表的元素赋初值
printf("sqlist:");
for (m = 0; m < l.length; m++)
printf("%d,", l.elem[m]); //输出顺序表
printf("\n");
i = 3;
e = 30; //在第i个位置上插入元素e
printf("\n在第%d个位置上,插入元素e=%d\n", i, e);
if (i < 0 || i > l.length + 1)
printf("i值不合法!\n");
else
{
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");
}
printf("\ninsert:"); //输出插入后的顺序表
for (m = 0; m < l.length; m++)
printf("%d,", l.elem[m]);
printf("\n");
i = 3; //删除第i个位置上的元素
printf("\n删除第%d个位置上的元素\n", i);
if (i < 0 || i > l.length + 1)
printf("i值不合法!/n");
else
{
p = l.elem + i - 1;
e = *p;
for (q = l.elem + l.length - 1; q >= p; p++)
*p = *(p + 1);
}
printf("\nDeleted element:e=%d\n", e);
l.length--;
printf("\ndelete:"); //输出删除后的顺序表
for (m = 0; m < l.length; m++)
printf("%d,", l.elem[m]);
printf("\n");
}
用c语言实现顺序表的创建、插入和删除
于 2022-03-17 16:44:34 首次发布