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

#include
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;


            }

你可能感兴趣的:(删除线性表中指定的一个元素,三种方法)