头歌实践平台答案educoder
数据结构-顺序表及其应用
第1关:顺序表的实现之查找功能
/*************************************************************
顺序表的实现之查找功能 实现文件
更新于2020年4月13日
**************************************************************/
void SL_GetAt(SqList L, int i, ElemType &e)
// 获取顺序表L的第i个元素赋给e,i的有效范围[1,L.length]。
{
// 请在这里补充代码,完成本关任务-*/
/********** Begin **********/
e = L.elem[i-1];
/********** End **********/
}
int SL_FindValue(SqList L, ElemType x)
// 在顺序表L中查找第一个值为x的元素,找到则返回该元素在表中的位置,否则返回0。
{
// 请在这里补充代码,完成本关任务
/********** Begin **********/
int i=0;
for(i=0;i<L.length;i++){
if (L.elem[i]==x)
return i+1;
}
return 0;
/********** End **********/
}
第2关:顺序表的实现之增删功能
/*************************************************************
顺序表的实现之增删功能 实现文件
更新于2020年4月13日
**************************************************************/
void SL_InsAt(SqList &L, int i, ElemType e)
// 在顺序表的第i个位置插入新元素e, 即在元素L.elem[i-1]之前插入
// i的有效范围[1,L.length+1]
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int j;
for(j=L.length;j>i-2;--j)
{
L.elem[j+1] = L.elem[j];
}
L.elem[j+1] = e;
L.length++;
/********** End **********/
}
void SL_DelAt(SqList &L, int i)
// 删除顺序表L的第i个元素
//i的有效范围[1,L.length]
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
int j;
for (j=i-1;j<=L.length;++j)
{
L.elem[j] = L.elem[j+1];
}
L.length--;
/********** End **********/
}
void SL_DelValue(SqList &L, ElemType x)
// 删除第一个值为x的元素
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
//方法一:while查找待删值位置,进入for循环删除
int i=0;
while(L.elem[i]!=x&&i<L.length)
i++;
if(L.elem[i]==x)
{
for (i;i<L.length;i++)
L.elem[i] = L.elem[i+1];
L.length--;
}
/*方法二:查到位置,立刻删除
int i=0;
for(i=0;i<L.length;i++)
{
if(L.elem[i]==x)
{
for(i;i<L.length;i++)
L.elem[i] = L.elem[i+1];
L.length--;
break;
}
}
*/
/********** End **********/
}
第3关:顺序表的合并
/*************************************************************
顺序表的合并 实现文件
更新于2020年4月13日
**************************************************************/
void MergeList_Sq(SqList LA,SqList LB,SqList &LC)
//已知顺序表LA和LB的元素按值非递减排列
//归并LA和LB得到新的顺序表LC,LC的元素也按值非递减排列。
{
// 请在这里补充代码,完成本关任务
/********** Begin *********/
//1.定义
LC.length = LA.length + LB.length;
int i=0 , j=0,t=0;
//比较两个顺序表中的值,并将小的值放入LC中,当其中一个表比较完成后
while(i<LA.length&&j<LB.length)
{
if(LA.elem[i]<=LB.elem[j])
LC.elem[t++] = LA.elem[i++];
else
LC.elem[t++] = LB.elem[j++];
}
//2.直接将另一个未比较完成的表中的剩余值全部放到LC中
if(i==LA.length)
{
while(t<LC.length)
LC.elem[t++] = LB.elem[j++];
}
else
{
while(t<LC.length)
LC.elem[t++] = LA.elem[i++];
}
/********** End **********/
}
"答案仅供参考"
"直接抄袭毫无意义"