线性表的顺序存储
- 初始化
typedef struct//init为空线性表
{
ElemType elem[MAXSIZE];
int length;//教材上写的是last,其实就是现有长度的意思,写length更好理解
}SeqList;
- 查找
int GetData(SeqList L,int i)//按序号查找
{
if(i<1||i>L.length)
return ERROR;
return L.elem[i-1];
}
int Locate(SeqList L,ElemType e)//按内容查找
{
int i;
for(i=0;i<L.length;i++)
{
if(e==L.elem[i])
return (i+1);
}
return ERROR;
}
- 插入
int InsList(SeqList *L,int i,ElemType e)
{
int j=L->length;
if(L->length==0)//空表
return ERROR;
if(L->length>=MAXSIZE)
{
printf("表已经插满!");
return ERROR;
}
if(i<L->length)//如果不是表尾,就需要依次后移
{
while(j>=i)
{
L->elem[j]=L->elem[j-1];//注意线性表是从1开始,二数组是从0开始的
j--;
}
}
L->elem[i-1]=e;
L->length++;
return OK;
}
- 删除
int DelList(SeqList *L,int i,ElemType *e)
{
if(L->length==0||i<1||i>L->length)//空表或者不在表内
return ERROR;
e=&L->elem[i-1];
while(i<=L->length)
{
L->elem[i-1]=L->elem[i];
i++;
}
L->length--;
return OK;
}
- 合并
int merge(SeqList *LA,SeqList *LB,SeqList *LC)
{
int i=0,j=0,k=0;//用于记录LABC操作到第几个数了
while(i<LA->length&&j<LB->length)//当a,b表都还没结束时
{
if(LA->elem[i]<=LB->elem[j])
{
LC->elem[k]=LA->elem[i];
k++,i++;
}
else
{
LC->elem[k]=LB->elem[j];
k++,j++;
}
}
while(i<LA->length) //如果AB表还有多余的继续插入
{
LC->elem[k++]=LA->elem[i++];
i++,k++;
}
while(j<LB->length)
{
LC->elem[k++]=LB->elem[j++];
k++,j++;
}
LC->length=LA->length+LB->length;
}
其中关于定义结构体这里出了一点小问题,后来查阅资料后做了总结
参考资料:https://blog.csdn.net/qq_41848006/article/details/81321883