顺序表-插入/删除操作

插入操作

我们可以继续实现一个插入操作,我们的基础的思想是,在已知的表中,于y位置,插入一个元素e;
即:Insertlist(&L,y,e);
为了实现这个操作,我们不难想到,对于顺序存储的数组,只需要将i位置及以后的元素挨个向后移动一位,再将e的值赋给i位置,就可以实现这样的操作。那么基于这个思想,我们可以得到:

void Insertlist(sqlist* L,int y,int e)
{
    for(int i =L.length ; i >= y; i--)
    {
        L.data[i]=L.data[i-1];    //将i-1元素复制到i位,注意数组下标和位置的对应关系
    };
    L.data[y-1]=e;
    length++;
};

这样,就能实现逻辑上的“插入”。

但不难发现,这样的操作具有不稳定性;1是当表满时,理论上无法再插入数据,此时调用Insertlist会出现丢失数据的情况;2是对于y的值我们并没有做出是否合法的判断,若我插入位置<0,或是大于表长(L.length),则会出现问题;
很明显,这段实现是不够稳定的,我们可以为他加上限制条件,即对于表是否为满和y的合法与否,两句简单的代码即可以实现:

    if (L->length >= MaxSize) return;    //表长>MaxSize时,即表满,不进行插入操作;
    if ( y<1 || y > L->length+1) return;    //当y<1或y>表长+1时,不进行插入操作;

所以,完整的插入操作即

void Insertlist(sqlist* L,int y,int e)
{
    if (L->length >= MaxSize) return;    //表长>MaxSize时,即表满,不进行插入操作;
    if ( y<1 || y > L->length+1) return;    //当y<0或y>表长+1时,不进行插入操作;
    for(int i =L.length ; i >= y; i--)
    {
        L.data[i]=L.data[i-1];    //将i-1元素复制到i位,注意数组下标和位置的对应关系
    };
    L.data[y-1]=e;
    L.length++;
};

删除操作

同样的,对于删除,我们的基础思想是:在已知的表中,删除第i位的元素,并将其返回;

即:Deletelist(sqlist *L , int i , int* e) ;

不难想到,对于删除的实现,我们同样可以借助将元素前移的思想,只需要注意,移动之前需要先获得删除元素即可,因此有:

void Deletelist(sqlist *L,int i,int* e)
{
    *e = L->data[i-1];
    for (int y = i; y < L->length-1; y++)  
    {
        L->data[y-1] = L->data[y];  //将元素挨个前移
    };
    L->length--;
};

仍旧需要注意下标的问题。

同时,也不难注意到,Delete操作同样不够完备;
1是对于表空的判别没有做;2是对于i值的合法性没有做;
因此,我们同样的也需要加上限定条件,即最终:

void Deletelist(sqlist *L,int i,int* e)
{
    if (L->length = 0); return;    //如果表为空,返回
    if (i>L->length || i<=0 ) return;    //如果i值非法,返回
    
    *e = L->data[i-1];
    for (int y = i; y < L->length-1; y++)  
    {
        L->data[y-1] = L->data[y];  //将元素挨个前移
    };
    L->length--;
};

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇