顺序表的增删改查操作

#include
#include
#include
using namespace std;
#define Elem int
#define status int
#define ok 1
#define no 0
#define list_int_size 100
#define listincrement 100
Elem * newbase,*p,*q;
typedef struct List{
    int length;//长度
    int listlength;//存储容量
    Elem * elem;//数组指针

};
//顺序表的创建初始化
status init_list(List &l){
    l.elem=(Elem *)malloc(list_int_size*sizeof(Elem));//分配存储空间
    if(!l.elem) exit(no);//存储空间失败
    l.length=0;
    l.listlength=list_int_size;
    return ok;
}
//顺序表的插入
status list_insert(List &l,int i,Elem e){
    if(i<1||i>l.length+1) return no;
    if(l.length>l.listlength)//如果存储空间不够
    {
        newbase=(Elem *)realloc(l.elem,(l.listlength+listincrement)*sizeof(Elem));
        if(!newbase) exit(no);
        l.elem=newbase;//新的基地址
        l.listlength+=listincrement;
    }
    q=&(l.elem[i-1]);
    for(p=&(l.elem[l.length-1]);p>=q;p--){
        *(p+1)=*p;
    }
    *q=e;
    l.length++;
    return ok;

    }
    //顺序表的删除
     status list_delete(List &l,int i){
        if(i<0||i>l.length) return no;
        q=&(l.elem[l.length-1]);
        int e;
         e=l.elem[i-1];
        for(p=&(l.elem[i-1]);p<=q;p++){
            *p=*(p+1);
        }

         l.length--;
        return ok;
     }
     //顺序表的修改
     status list_modify(List &la,int i,Elem e){
        if(i<0||i>la.length) return no;
         la.elem[i-1]=e;
         return 1;
     }
     //顺序表的查找
    status list_find(List la,Elem e){
        for(int i=0;i             if(la.elem[i]==e)
                return i+1;
        }
        return no;
    }

     //顺序表的合并,la,lb
     void merge_list(List &la,List lb){
         for(int i=0;i              for(int  j=0;j                    // cout<                 if(list_find(la,lb.elem[j])==0){//如果la中不含lb中的某个元素,则将该元素插入到la中
                    list_insert(la,la.length+1,lb.elem[j]);

                }
             }
         }
     }
     //顺序表的差    A-B
     void list_cha(List &A,List B,List &C){
         for(int i=0;i
                if(list_find(B,A.elem[i])==0){
                    list_insert(C,C.length+1,A.elem[i]);
                }

         }
     }
     //顺序表的交
     void list_jiao(List &la,List lb,List &lc){
          for(int i=0;i              for(int  j=0;j                 //if(list_find(la,lb.elem[j])==1){
                    if(la.elem[i]==lb.elem[j])
                    list_insert(lc,lc.length+1,lb.elem[j]);
                }
             }
         }

     //顺序表的显示
     void show(List L){
            int k;
            for(int i=0;i             cout<             cout<
     }
     //顺序表的释放
     void list_destroy(List &l){
             free(l.elem);
            l.length=0;
     }
     int main(){
     List L,la,lb,lc,ld,le;
     init_list(la);
     init_list(lb);
     init_list(lc);
     init_list(ld);
     init_list(le);
         for(int i=0;i<10;i++){
            la.elem[i]=i;
            lb.elem[i]=i+4;
            ld.elem[i]=i;
            le.elem[i]=i;
        }
         la.length=5;
         lb.length=5;
         ld.length=5;
         le.length=5;
         lc.length=0;
    int i,res,temp,a,b,c,e,m,n,flags;
    flags=-1;
    while(flags!=0)
    {
        cout<<"请选择:";
        cout<<"1. 建立顺序表  2. 输入数据 3. 查找 4. 插入  5. 删除 6.修改数据 7. 输出数据  8.输出la和lb的数据  9.la和lb的并集  10.la和lb的交集  11.la和lb的差集  0. 退出"<         cin>>flags;
        switch(flags)
        {
        case 1:
            if(init_list(L))                        //创建顺序表
                cout<<"成功建立顺序表\n\n";
            else
                cout<<"顺序表建立失败\n\n";
            break;
        case 2:                                        //输入10个数
            cout<<"请输入5个不同的数:\n";
            for(i=0;i<5;i++)
                cin>>L.elem[i];
            L.length=5;
            cout<             break;
        case 3:                                        //顺序表的查找
            cout<<"请输入所要查找的数:";
            cin>>e;                            //输入e,代表所要查找的数值
            temp=list_find(L,e);
            if(temp!=0)
                cout<             else
                cout<<"ld查找失败!没有这样的数\n\n";
            break;
        case 4:                                        //顺序表的插入
            cout<<"请输入两个数,分别代表插入的位置和插入数值:";
            cin>>a>>b;                //输入a和b,a代表插入的位置,b代表插入的数值
            if(list_insert(L,a,b))
                cout<<"插入成功.\n\n";
            else
                cout<<"I插入失败.\n\n";
            break;
        case 5:                                        //顺序表的删除
            cout<<"请输入所要删除的数的位置:";
            cin>>c;
                                //输入c,代表要删除数的位置
            if(list_delete(L,c))
                cout<<"删除成功"<             else
                cout<<"删除失败.\n\n";
            break;
        case 6:
            cout<<"输入修改的位置和修改成的值:";
            cin>>m>>n;
            list_modify(L,m,n);
            break;
        case 7:
            show(L);
            break;
        case 8:
            cout<<"第一个顺序表为:";
            show(ld);
            cout<<"第二个顺序表为:";
            show(lb);
            break;
        case 9:
        merge_list(la,lb);
        cout<<"la和lb的并集:";
        show(la);
            break;
        case 10:
        list_jiao(ld,lb,lc);
        cout<<"la和lb的交集:";
        show(lc);
        list_destroy(lc);
        lc.length=0;
            break;
        case 11:
        list_cha(le,lb,lc);
        cout<<"la和lb的差集:";

        show(lc);
        list_destroy(lc);
            break;
        case 0:
            return 0;
        }
    }
}


你可能感兴趣的:(顺序表的增删改查操作)