顺序表表结构体(DataType都是所存数据的类型)
struct SeqList{
int MAXNUM; //可存放个数
int n; //实际长度
DataType *element;
}
typedef struct SeqList *PSeqList;//定义结构体指针
//创建空顺序表(带参数m就是表空间大小)
PSeqList creatNullList_seq(int m){
PSeqList palist = (PSeqList)malloc(sizeof(struct SeqList));//申请空间
if(palist != NULL)
{
palist->element = (DataType*)malloc(sizeof(DataType)*m);//申请空间存下数据
if(palist->element)
{
palist->MAXNUM = m;
palist->n = 0; //实际长度为0 一个数也没有
return palist;
}
else
free palist;
}
printf(“out of space!!\m”);
return NULL;
}
//判断线性表是否为空
int isNULLList_seq(PSeqList palist){ //直接查询n大小即可
return (palist->n==0);
}
//求某元素下标
int locate_seq(PSeqList palist,DataType x) //x为要求的数字
{
int q;
for(q=0;q<palist->n;q++) //遍历整个顺序表
{
if(palist->element[q] == x)
return q;
}
return -1;
}
//顺序表的插入,☞在固定的某一位下标后面插入
int insertPre_seq(PSeqList palist,int p,DataType x) //在palist所指顺序表中下标为p的元素之前插入元素x
{
int q;
if(palist->n >= palist->MAXNUM) //判断顺序表是否已满员
{
printf("overflow!!\n");
return 0;
}
if(p<0 || p>palist->n){ //再判断是否有下标为p的元素
printf("No exist!\n");
return 0;
}
for(q=palist->n-1;q>=p;q--) // 从后往前一直到p 由于0被计算入下标 n-1才是最后一个数的下标
palist->element[q+1] = palist->element[q]; //把q后面包括q的数往后移动一位,隐藏在内的是移动就是复制到下一空间
palist->element[p] = x; //这里p位置存的数覆盖掉
palist->n = palist->n+1; //实际长度加一
return 1;
}
//顺序表的删除
int deleteP_seq(PList palist,int p){ //删除下标为q的元素
int q;
if(p<0 || p->palist->n-1){ //判断是否存在下标为q的数
printf("No exist~!\n");
return 0;
}
for(q=p;q<=palist->n-1;q++) //从p开始遍历顺序表
palist->element[q]=palist->element[q+1];//将顺序的下一个数复制给上一个数,到最后n里面的空 因此原来下标为n-1的数据归零
palist->n = palist->n-1; //数据长度减1
return 1;
}