题目:
初始化顺序表(顺序表中元素为整型),里边的元素是1,2,3,然后通过scanf读取一个元素(假如插入的是6),插入到第2个位置,打印输出顺序表,每个元素占3个空格,格式为1 6 2 3,然后scanf读取一个整型数,是删除的位置(假如输入为1),然后输出顺序表 6 2 3,假如输入的位置不合法,输出false字符串。(提醒,Language一定要选为C++。)
Input
第一次输入插入的元素值,第二次输入删除的位置
Output
假如插入的元素为6,那么输出为
1 6 2 3假如删除的位置为1,那么输出为
6 2 3
//初始化顺序表(顺序表中元素为整型),里边的元素是1,2,3,
// 然后通过scanf读取一个元素(假如插入的是6),插入到第2个位置,
// 打印输出顺序表,每个元素占3个空格,格式为1 6 2 3,
// 然后scanf读取一个整型数,是删除的位置(假如输入为1),然后输出顺序表 6 2 3,
// 假如输入的位置不合法,输出false字符串。
#include <iostream>
#define MaxSize 50
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];
int length;
}SqList;
//插入 (合法 内存)
bool ListInert(SqList &L,int i,ElemType e)
{
if (i<0||i>L.length+1)
{
return false;
}
if(L.length>=MaxSize)
{
return false;
}
for (int j = L.length; j >=i ; j--) {
L.data[j]=L.data[j-1];
}
L.data[i-1]=e;
L.length++;
return true;
}
//打印
void PrintList(SqList L)
{
int i;
for (i = 0; i < L.length; i++)
{
printf("%3d",L.data[i]);
}
printf("\n");
}
//删除 i合法
bool ListDelete(SqList &L,int i)
{
if(i<1||i>L.length)
{
return false;
}
for (int j = i; j < L.length; j++) {
L.data[j-1]=L.data[j];
}
L.length--;
return true;
}
int main() {
SqList L;
int a,del;
L.data[0]=1;
L.data[1]=2;
L.data[2]=3;
L.length=3;
scanf("%d",&a); //读取元素
bool ret;
ret=ListInert(L,2,a);
if(ret)
{
PrintList(L);
}
bool pos;
scanf("%d",&del);//读取 删除位置
pos=ListDelete(L,del);
if(pos)
{
PrintList(L);
}else{
printf("false\n");
}
return 0;
}
反思:
- 我第一次做时,思路是挺清晰的,在插入和删除时都有画图,但最后上传的时候没有AC,检查后才发现是删除的函数 bool ListDelete(SqList &L,int i) 忘记加引用了“&”,导致没有删除成功
- 插入的 i 合法判断长度要注意是可以插入表尾后面的,故 i > len+1
也可以插表头 i<1