#define LISTSIZE 100 //用宏定义定义线性表的最多能保存元素的个数
typedef int DataType //typedef的作用是为int类型起别名为DataType
typedef struct SeqList //为结构体类型起别名为SeqList
{
DataType data[LISTSIZE]; //使用数组作为线性表
int nLength; //线性表的长度
} SeqList;
//① 初始化
void intList(SeqList *list) //形参用结构体指针,使传过来的地址指向结构体首部
{
list->nLength = 0; //使&sl->list->nLength = 0;使线性表长度为0
}
//② 判断线性表是否为空
bool listEmpty(SeqList *list)
{
return list->nLength == 0; //判断
}
//③ 删除线性表中的所有元素
void clearList(SeqList *list) //形参用结构体指针,使传过来的地址指向结构体首部
{
list->nLength = 0; //使&sl->list->nLength = 0;使线性表长度为0
}
//④ 获取线性表L中元素的个数
int listLength(SeqList *list)
{
return list->nLength;
}
//⑤ 获取线性表中下标为i的元素
DataType* getNode(SeqList *list, int i) //DataType*(int*)类型指针
{
if ( i<0||i>list->nLength-1 )
return NULL;
return &list->data[i]; //放回data[i]的地址
}
//⑥ 在线性表中查找指定的元素(定位)
int locateNode(SeqList *list,DataType x)
{
int =i;
int =j;
for (i=0;i<list->nLength;i++) //需要循环5次应为,因为线性表长度为5,而list->nLength表示的是nLength 的值
{
if(list->data[i] == x)
return i;
}
return -1; //x的值不存在则返回-1
}
//⑦ 为线性表中下标为i的位置插入元素
bool insert(SeqList *list,int i,DataType x)
{
if(list->nLength == LISTSIZE) //如果线性表的长度已经满了,那么就不能在存了
return false;
int insertPosition = i; //定义插入变量把i的值赋予给它
if (i < 0) //在线性表范围外则结构体外
insertPosition = 0;
if(i>list->nLength-1) //在线性表范围外则结构内,线性表外(nLengtht-1:最后一个元素的下标)
insertPosition = list->nLength;
for(j=list->nLength-1;j>=insertPosition;j--) //线性表总长度为4即nLength-1
{
list->data[j+1]=list->data[j]; //元素往后移动一位(从倒数第一个开始挪)
}
list->data[insertPosition] = x; //在确定的位置插入元素值
list->nLength++; //线性表长度增加1
return true;
}
void main()
{
SeqList sl;
intList(&sl); //初始化后nLength为0
bool tmpty = listEmpty(&sl); //定义一个布尔变量
//假如已经为线性表赋予了5个元素,即长度为0
DataType *pNode = getNode($sl,3); //向sl指向的线性表(结构体:线性表+线性表长度)中取出第4(下标为3)个元素的地址赋值给*pNode
printf("%d",*pNode);
int index = locateNode(&sl,6); //查找线性表中6所在的位置
printf("%d",index+i);
insert(&sl,5,10); //在下标为5的位置插入一个数值10
}