删除线性表中指定的一个元素,三种方法

#include<iostream>
using namespace std;
const int Max=50;
    typedef struct
        {
            int a[Max];
            int length;
        }sqlist;
    void creat(sqlist &L,int n);
    void printlist(sqlist &L);
    void shanchu1(sqlist &L,int x);
    void shanchu2(sqlist &L,int x);
    void shanchu3(sqlist &L,int x);
    int  main()
        {
                cout<<"你想创建几个节点"<<endl;
                int n;
                cin>>n;
                sqlist list1;
                creat(list1,n);
                printlist(list1);
                cout<<"你想删除的数是?"<<endl;
                int m;
                cin>>m;
                shanchu1(list1,m);
                printlist(list1);
                //******
                sqlist list2;
                cout<<"你想创建几个节点"<<endl;
                cin>>n;
                creat(list2,n);
                printlist(list2);
                cout<<"你想删除的数是?"<<endl;
                cin>>m;
                shanchu2(list2,m);
                printlist(list2);
                //******
                sqlist list3;
                cout<<"你想创建几个节点"<<endl;
                cin>>n;
                creat(list3,n);
                printlist(list3);
                cout<<"你想删除的数是?"<<endl;
                cin>>m;
                shanchu3(list3,m);
                printlist(list3);

                return 0;
        }


            void creat(sqlist &L,int n)
                {
                    int i=0;
                    cin>>L.a[i];
                    for(i=1;i<=n-1;i++)
                    {
                        cin>>L.a[i];

                    }
                    L.length=i;
                }


            void printlist(sqlist &L)
            {
                if(L.length==0)
                {
                    return ;
                }

                else
                {
                    int i;
                    for(i=0;i<=L.length-1;i++)
                    {
                        cout<<L.a[i]<<"  ";
                    }
                    cout<<endl;
                }
            }


             void shanchu1(sqlist &L,int x)  //删除指定的元素 方法1
                {
                    int i=0,j;
                    while((i<L.length-1)&&L.a[i]!=x)
                    {
                        i++;
                    }
                    if(i==L.length)
                    {
                        return ;
                    }
                    while(i<=L.length-1)
                       {

                            if(L.a[i]==x)
                            {
                                j=i;
                                for(j=i;j<=L.length-2;j++)
                                {
                                    L.a[j]=L.a[j+1];
                                }
                                i--;
                                L.length-=1;
                            }

                            i++;

                        }
                }

                void shanchu2(sqlist &L,int x) //方法2
                    {
                        int i=0,j;
                        while(i<=L.length-1&&L.a[i]!=x)
                          {
                              i++;
                          }

                          if(i==L.length)
                          {
                              return ;
                          }
                          j=i+1;
                        while(j<=L.length-1)
                        {
                            if(L.a[j]!=x)
                            {
                                L.a[i]=L.a[j];
                                i++;
                            }

                            j++;
                        }

                        L.length=i;
                    }

        void shanchu3(sqlist &L,int x)  //方法3
            {
                int i=0,k=0;;
                while(i<=L.length-1)
                {
                    if(L.a[i]==x)
                    {
                        k++;
                    }
                    else
                    {
                        L.a[i-k]=L.a[i];
                    }
                    i++;
                }

                L.length=L.length-k;


            }
在顺序存储的线性表删除指定位置pos上的元素,通常涉及以下几个步骤: 1. **检查边界条件**:确保pos是一个有效的索引,即0 <= pos < n,其n是线性表的长度。如果pos超出范围,通常返回错误或者不执行任何操作。 2. **移动元素**:从pos+1的位置开始,将每个后续元素都向前移动一个位置,即`A[pos] = A[pos+1]`。这是关键的一步,因为我们要腾出pos位置以便于删除。 3. **删除元素**:如果你正在使用的是数组,删除元素通常意味着将最后一个元素(现在在原pos位置)移到空出来的位置,并将最后一个元素置为null或0(视情况而定)。如果是链表,只需改变前一个节点的next指向,使得它不再指向被删除的节点。 4. **减小长度**:如果数组,你需要减少列表长度`n -= 1`。如果链表,无此操作,因为链表的长度不是固定的。 下面是一个简单的Python示例(假设数组): ```python def delete_at_pos(A, pos): # 检查索引 if not (0 <= pos < len(A)): return # 移动元素 for i in range(pos, len(A) - 1): # 注意:不包括最后一个元素,因为它会被覆盖 A[i] = A[i+1] # 减少长度和赋值 A.pop() # 对数组而言,这会自动减少长度并删除最后一个元素 # 使用示例 data = [1, 2, 3, 4, 5] delete_at_pos(data, 2) # 删除第三个元素 ``` 记得删除元素的具体操作依赖于所使用的数据结构,上述代码适用于数组。对于链表,操作会更简单一些,因为不需要移动其他节点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值