1.主要函数1:按元素值查找位置
按照x的值,找到顺序表中第一个比x大的元素的位置;
int findElem(Sqlist L, int x)
{
int i;
for(i = 0; i<L.length;i++)
{
if(x < L.data[i])
return i;
}
return i;
}
2.主要函数2:元素后移一位置
将1中找出的位置上以及其后的元素往后移动一个位置,然后将x放到腾出的位置上。
void insertElem(Sqlist &L, int x)
{
int p,i;
p = findElem(L,x);
for(i=L.length-1;i>=p;--i)
{
L.data[i+1] = L.data[i];
}
L.data[p] = x;
++(L.length);
}
完整代码:
#include <iostream>
using namespace std;
# define maxSize 100
typedef struct
{
int data[maxSize];
int length;
}Sqlist;
int findElem(Sqlist L, int x)
{
int i;
for(i = 0; i<L.length;i++)
{
if(x < L.data[i])
return i;
}
return i;
}
void initList(Sqlist &L)
{
L.length = 0;
}
void insertElem(Sqlist &L, int x)
{
int p,i;
p = findElem(L,x);
for(i=L.length-1;i>=p;--i)
{
L.data[i+1] = L.data[i];
printf("移动的下标位置i = %d\n",i);
}
L.data[p] = x;
//表长要自增1,并且是先后移再插入x,最后增表长
++(L.length);
}
int main(){
Sqlist L;
int i;
initList(L);
L.length = 8;
L.data[0] = 4;
L.data[1] = 5;
L.data[2] = 6;
L.data[3] = 7;
L.data[4] = 9;
L.data[5] = 13;
L.data[6] = 15;
L.data[7] = 22;
insertElem(L,12);
for (i=0;i<L.length;++i)
{
printf("L.data[%d]=%d\n",i,L.data[i]);
}
printf("L的表长=%d\n",L.length);
return 0;
}
总结:
表长自增1,容易忘记。并且是先后移再插入x,最后增表长。这里的顺序问题要注意。
容易犯错的地方:
思考为何不先增表长,再后移再插入x