#include<stdio.h>
#include <malloc.h>
typedef struct SeqList* PSeqList;
struct SeqList //定义线表
{
int MAX; //顺序表中最大元素的个数 MAX
int n; //存放线表中元素的个数n < MAX
double* element;//定义顺序表的首地址 *element
};
//创建空顺序表
PSeqList ChuangjianList(int m) //参数m是创建的顺序表的大小,即MAX=m
{
//先为线表申请一个struct SeqList大小的空间
PSeqList list = (PSeqList)malloc(sizeof(struct SeqList));
if (list != NULL) //如果顺序表list不为空,才能操作
{
list->element = (double*)malloc(sizeof(int) * m);//给element分配一个m大小的空间
if (list->element) //当指针指向线表的首地址时
{
list->MAX = m; //
list->n = 0;
return list;
}
else free(list);
}
printf("线表申请失败!");
return NULL;
}
//线表的插入
int Charulist(PSeqList list, int p, int x)//定义函数(插入的线表,插入的位置,插入的元素)
{
int q; //定义
if (list->n > list->MAX) //判断线表元素是否已满
{
printf("线表溢出!");
return 0;
}
if (p<0 && p>list->MAX) //判断要插入的位置是否已经大于线表的最大长度
{
printf("位置无效!");
}
else //如果都满足以上两个条件
{
for (q = list->n - 1; q >= p; q--) //插入的位置以及之后的元素均要后移一个位置
{
list->element[q + 1] = list->element[q];
}
list->element[p] = x; //把p的位置给插入的元素,即插入元素x
list->n = list->n + 1; //总的元素个数加1
return 1; //返回1表示插入元素成功
}
}
//删除元素
int ShanchuList(PSeqList list, int p)//函数的格式(删除下标所在线表,删除的下标)
{
int q;
if (q<0 && q>list->MAX) //判断删除的下标是否存在
{
printf("删除的下标不存在!");
return 0;
}
for (q = p; p < list->n - 1; q++) /*如果下标存在,从所需要删除的下标起,让数组元素的
后一个代替前一个*/
{
list->element[q] = list->element[q + 1];
}
list->n = list->n - 1; //因为有一个元素被删除,数组中的元素需要减去1
return 1;
}
PS:在此线表即顺序表