-
线性表定义
typedef int DataType;
struct seqList
{//有3个数据成员
int MAXNUM;//用于记录顺序线性表中能存放的最大元素个数的 整型 MAXNUM 存储容量
int curNum;//用于存放顺序线性表中数据元素的个数 整型 curNum 目前存储个数
DataType *element;//用于存放顺序线性表数据元素的连续空间的起始地址
};
-
创造一个空的顺序线性表
PseqList createNullList_seq(int m)
{//此处填写代码,创建一个空的顺序线性表,能存放的最大元素个数为 m
//若m=0,则返回NULL
if(m==0) return NULL;
PseqList head=(PseqList)malloc(sizeof(struct seqList));
if(head==NULL) return NULL;
head->MAXNUM=m;
head->curNum=0;
head->element=(DataType*)malloc(sizeof(DataType)*m);
if(head->element==NULL){
free(head);return NULL;
}
return head;
}
- 判断线性表是否为空
int isFullList_seq(PseqList L)
{
//判断顺序线性表是否已满,若已满,返回值为1,否则返回值为0
if(L->MAXNUM==L->curNum) return 1;
else return 0;
}
插入元素
int insertP_seq(PseqList L , int p ,int x)
{// 在线性表L中下标为p的位置插入数据元素x,若下标p非法或线性表已满无法插入数据,返回0;插入成功返回值为1
//如果线性表满了, 还需输"list is full"的提示
//如果插入位置非法,需输出提示"position is illegel"
if(p<0||p>L->MAXNUM) {
printf("position is illegel");return 0;
}
if(isFullList_seq(L)==1){
printf("list is full");return 0;
}
for(int i=L->curNum-1;i>=p;i--) L->element[i+1]=L->element[i];
L->element[p]=x;
L->curNum++;
return 1;
}
输出元素
void printList_seq(PseqList L)
{//逐个输出线性表的元素,相邻的两个数据元素之间以一个空格为分隔符隔开
for(int i=0;i<L->curNum;i++){
printf("%d ",L->element[i]);
}
}
销毁线性表
int destroyList_seq(PseqList L)
{
//返回值为销毁的线性表中现有数据元素的个数,若待销毁的线性表不存在,则返回0
if(L==NULL) return 0;
int ans=L->curNum;
free(L);
return ans;
}
查找X首次出现的位置
int locate_seq(PseqList L,int x)
{//在顺序表L中查找给定值x首次出现的位置,若不存在给定值,则返回-1
for(int i=0;i<L->curNum;i++){
if(L->element[i]==x) return i;
}
return -1;
}
查找指定位置处的元素
DataType locatePos_seq(PseqList L,int pos)
{// 在顺序表L中查找指定位置pos处的数据元素,若位置非法,则返回第0个数据元素
if(pos<0||pos>L->MAXNUM) return L->element[0];
return L->element[pos];
}
删除指定下标的元素
int deletePos_seq(PseqList L,int pos)
{//在顺序表L中删除与下标pos处的数据元素,若pos非法,则返回-1;否则返回1
if(pos<0||pos>L->curNum-1) return -1;
for(int i=pos;i<L->curNum-1;i++) L->element[i]=L->element[i+1];
L->curNum--;
return 1;
}
删除与X相同的所有元素
int delete_seq(PseqList L,int x)
{//在顺序表L中删除与参数x值相同的数据元素,返回删除数据元素的个数
//可以使用之前已完成的操作
int pos,res=0,flag;
while(1){
pos=locate_seq(L,x);
if(pos==-1) break;
deletePos_seq(L,pos);
res++;
}
return res;
}