```c
#include <stdlib.h>
#include <stdio.h>
#define InitSize 10 //默认的最大长度
typedef struct{
int *data;//指示动态分配数组的指针,指向分配内存空间的第一个位置
int MaxSize;//顺序表的最大容量
int length;//顺序表的当前长度
}SeqList;
void InitList(SeqList &L){
//用malloc函数申请一片连续的存储空间
L.data=(int *)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
void IncreaseSize(SeqList &L,int len){
int *p=L.data;
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
for(int i=0;i<L.length;i++){
L.data[i]=p[i];//将数据复制到新区域
}
L.MaxSize=L.MaxSize+len;//顺序表最大长度增加len
free(p);//释放原来的内存空间
}
SeqList ListInsert(SqList &L,int i,int e){
if(i<1||i>L.length+1)//判断i的范围是否有效
{
printf("INSERT ERROR!");
}
else if(L.length>=MaxSize)//当前存储空间已满
{
printf("OVERFLOW!");
}
else
{
for(int j=L.length;j>i;j--)//将第i个元素及之后的元素后移
{
L.data[j]=L.data[j-1];
L.data[i-1]=e;//在位置i处(对应数组下标为i-1)放入e
L.length++;//长度加1
}
}
return L;
}
SeqList ListDelete(SeqList &L,int i,int &e){
if(i<1||i>L.length+1)//判断i的范围是否有效
printf("DELETE ERROR!");
else{
e=L.data[i-1];
for(j=i;j<L.length;j++)
L.data[j-1]=L.data[j];
L.length--;
}
return L;
}
void ListDisplay(SeqList L){
int j;
for(j=0;j<=L.length-1;j++)
printf("%4d",L.data[j]);
printf("\n");
}
int LocateElem(SeqList L,int e){
for(int i=0;i < L.length;i++)
if(L.data[i]==e)
return i+1;
return 0;
}
int main(){
SeqList L;
InitList(L);
int j;
printf("\n请输入顺序表长度:");
scanf("%d",&L.length);
printf("请输入顺序表元素:\n");
for(j=0;j<=L.length-1;j++){
scanf("%d",&L.data[j]);
}
//插入元素
int i,x;
printf("请输入插入操作位置:");
scanf("%d",&i);
printf("请输入插入的新元素:");
scanf("%d",&x);
L=ListInsert(L,i,x);
//删除元素
int e;
printf("请输入删除操作位置:");
scanf("%d",&i);
L=ListDelete(L,i,e);
return 0;
}
c没有引用&,用指针。
#define InitSize 10 //默认的最大长度
typedef struct
{
int *data; //指示动态分配数组的指针,指向分配内存空间的第一个位置
int MaxSize; //顺序表的最大容量
int length; //顺序表的当前长度
} SeqList;
void InitList(SeqList *L)
{
//用malloc函数申请一片连续的存储空间
L->data = (int *)malloc(InitSize * sizeof(int));
L->length = 0;
L->MaxSize = InitSize;
}
void IncreaseSize(SeqList *L, int len)
{
int *p;
p = (int *)realloc(L->data, (L->MaxSize + len) * sizeof(int));
if (p != NULL)
{
L->data = p;
p = NULL;
L->MaxSize = L->MaxSize + len; //顺序表最大长度增加len
}
}
void ListInsert(SeqList *L, int i, int e) //
{
if (i < 1 || i > L->length + 1) //判断i的范围是否有效
{
printf("INSERT ERROR!");
}
else if (L->length >= L->MaxSize) //当前存储空间已满
{
printf("OVERFLOW!");
}
else
{
for (int j = L->length; j >= i; j--) //将第i个元素及之后的元素后移
{
L->data[j] = L->data[j - 1];
}
L->data[i - 1] = e; //在位置i处(对应数组下标为i-1)放入e
L->length++; //长度加1
}
// return L;
}
void ListDelete(SeqList *L, int i, int *e) //
{
if (i < 1 || i > L->length + 1) //判断i的范围是否有效
printf("DELETE ERROR!");
else
{
*e = L->data[i - 1];
for (int j = i; j < L->length; j++)
L->data[j - 1] = L->data[j];
L->length--;
}
// return L;
}
void ListDisplay(SeqList *L)
{
int j;
for (j = 0; j <= L->length - 1; j++)
printf("%4d", L->data[j]);
printf("\n");
}
int LocateElem(SeqList *L, int e)
{
for (int i = 0; i < L->length; i++)
if (L->data[i] == e)
return i + 1;
return 0;
}
int main()
{
SeqList L;
InitList(&L);
printf("\n请输入顺序表长度:");
scanf("%d", &L.length);
printf("请输入顺序表元素:\n");
for (int j = 0; j < L.length; j++) //
{
scanf("%d", &L.data[j]);
}
ListDisplay(&L);
//插入元素
int i, x;
printf("请输入插入操作位置:");
scanf("%d", &i);
printf("请输入插入的新元素:");
scanf("%d", &x);
ListInsert(&L, i, x); //
ListDisplay(&L);
//删除元素
int e;
printf("请输入删除操作位置:");
scanf("%d", &i);
ListDelete(&L, i, &e); //
ListDisplay(&L);
return 0;
}
你可以参考下这篇文章:顺序表的基本操作实现