1.建表

首先就建立一个表出来,这里我们用struct

#define max 20
typedef struct
{
int data[max];
int length;
}SqList;

2.获得元素

获得元素,我们用一个函数来实现这个步骤。其中,如果表是空表,那自然无法获得元素;而想要获得的第0个元素和表中最后一个元素+1,都是非法操作。

int Get(SqList*L,int i,int e)
{
if(L->length==0)
{
printf("这是一个空表");
return;
}
if(i<1||i>L->length)
{
printf("传入参数数值错误");
return;
}
e=L->data[i-1];
return e;
}

3.插入元素

这里插入,就是将插入位置的元素这个开始,所有元素都往后移。当然,有个前提条件,就是这个表没有满。在没满的情况下,插入第0个位置和表中最后一个元素+1的位置都是错误的。并且,插入元素后,线性表长度+1。

void Insert(SqList*L,int i,int e)
{
if(L->length==max)
{
printf("表满了");
return;
}
if(i<1||i>L->length+1)
{
printf("非法操作");
return;
}
for(int j=L->length-1;j>=i-1;j--)
L->data[j+1]=L->data[j];
L->length++;
L->data[i-1]=e;
}

4.删除元素

删除元素,就是以当前要删除的元素为基准,将后面的元素往前移。同时,表不能是空表;删除位置不能是第0个和最后一个+1.删除成功后,线性表长度-1.

void Delete(SqList*L,int i)
{
if(L->length==0)
{
printf("这是一个空表");
return;
}
if(i<1||i>L->length)
{
printf("非法操作");
return;
}
for(int k=i-1;k<L->length;k++)
L->data[k]=L->data[k+1];
L->length--;
}

5.代码部分

#include<stdio.h>
#include<malloc.h>
#define max 20
//建表
typedef struct
{
int data[max];
int length;
}SqList;
//获得元素
int Get(SqList* L, int i, int e)
{
if (L->length == 0)
{
printf("这是一个空表");
return;
}
if (i<1 || i>L->length)
{
printf("传入参数数值错误");
return;
}
e = L->data[i - 1];
return e;
}
//插入元素
void Insert(SqList* L, int i, int e)
{
if (L->length == max)
{
printf("表满了");
return;
}
if (i<1 || i>L->length + 1)
{
printf("非法操作");
return;
}
for (int j = L->length - 1; j >= i - 1; j--)
L->data[j + 1] = L->data[j];
L->length++;
L->data[i - 1] = e;
}
//删除元素
void Delete(SqList* L, int i)
{
if (L->length == 0)
{
printf("这是一个空表");
return;
}
if (i<1 || i>L->length)
{
printf("非法操作");
return;
}
for (int k = i - 1; k < L->length; k++)
L->data[k] = L->data[k + 1];
L->length--;
}
int main()
{
SqList* L = (SqList*)malloc(sizeof(SqList));
L->length = 0;//开始为0
for (int i = 0; i < 10; i++)
{
L->data[i] = i;
L->length++;
}
int li = 0;
//获得元素
for (int i = 1; i <= L->length; i++)//打印初始表
{
li = Get(L, i, li);
printf("%d ", li);
}
printf("\n");
//插入元素
for (int i = 1; i <= 5; i += 2)//注意i从1开始
Insert(L, i, 2*i);
for (int i = 1; i <= L->length; i++)//打印插入元素后的表
{
li = Get(L, i, li);
printf("%d ", li);
}
printf("\n");
//删除元素
for (int i = 2; i <= 5; i += 2)
Delete(L, i);
for (int i = 1; i <= L->length; i++)//打印删除元素后的表
{
li = Get(L, i, li);
printf("%d ", li);
}
printf("\n");
free(L);
return 0;
}


参考:大话数据结构