顺序表

来源:互联网 发布:威海矩阵直销软件价格 编辑:程序博客网 时间:2024/05/22 01:30
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;#define sizelist 100#define listincrease 10#define error -1#define ok 0typedef struct{    int *data;    int length;    int listsize;} sqlist;int createlist(sqlist &L,char *ch){    L.data=(int*)malloc(sizelist*sizeof(int));    L.length=0;    L.listsize=sizelist;    int n,i;    cout<<"输入链表"<<ch<<"初始长度:";    cin>>n;    if(n<=0)        return error;    cout<<"输入链表"<<ch<<"初始元素:";    for(i=0; i<n; i++)        scanf("%d",&L.data[i]);    L.length+=n;    return 0;}int insertlist(sqlist &L,int i,int e){    int *p;    int j=L.length;    if(i<0||i>L.length)    {        cout<<"插入位置有误!!!\n";        return error;    }    if(L.length>=sizelist)    {        int *newbase=(int*)realloc(L.data,(L.listsize+listincrease)*sizeof(int));        if(!newbase)        {            cout<<"存储内存分配失败!!!\n";            return error;        }        L.listsize+=listincrease;        L.data=newbase;    }    for(p=L.data+L.length; p>=L.data; p--,j--)    {        if(i==j)            break;        *p=*(p-1);    }    L.data[i]=e;    L.length++;    return ok;}int deletelist(sqlist &L,int i){    int *p;    if(i<1||i>L.length)    {        cout<<"删除位置有误!!!\n";        return error;    }    for(p=L.data+i-1; p<=L.data+L.length; p++)        *p=*(p+1);    L.length--;    return ok;}int print(sqlist &L,char *ch){    int *p;    p=L.data;    if(!L.length)    {        cout<<"链表"<<ch<<"为空!!!"<<endl;        return error;    }    else    {        cout<<"输出链表"<<ch<<":"<<endl;        int i=0;        for(i=0; i<L.length; i++)        {            printf("%d ",*p);            p++;        }        cout<<"\n";    }    return 0;}void locate(sqlist &L,int e){    int *p=L.data;    int i=0;    int flag=0;    while(p<=L.data+L.length)    {        i++;        if(e==*p)        {            if(!flag)                cout<<"输出该元素位置:\n";            cout<<i<<" ";            flag=1;        }        p++;    }    if(!flag)        cout<<"未找到!";    cout<<"\n";}void mergelist(sqlist &L,sqlist &Lb,sqlist &Lc){    Lc.data=(int*)malloc(sizelist*sizeof(int));    Lc.length=0;    Lc.listsize=sizelist;    int *pa=L.data,*pb=Lb.data,*pc=Lc.data;    int *pa_last=pa+L.length-1,*pb_last=pb+Lb.length-1;    while(pa<=pa_last&&pb<=pb_last)    {        if(*pa<*pb)            *(pc++)=*(pa++);        else            *(pc++)=*(pb++);        Lc.length++;    }    while(pa<=pa_last)    {        *pc++=*pa++;        Lc.length++;    }    while(pb<=pb_last)    {         *pc++=*pb++;          Lc.length++;    }   print(Lc,"Lc");}int main(){    sqlist l,l2,l3;    int choice=-1,e,i;    createlist(l,"La");    createlist(l2,"Lb");    printf("0-结束\n1-打印链表La和Lb\n2-对链表La插入\n3-对链表La删除\n4-对链表La定位\n5-合并链表La和Lb\n6-重建链表La\n7-重建链表Lb\n\n");    printf("选项:\n");    while(~scanf("%d",&choice))    {        system("CLS");       printf("0-结束\n1-打印链表La和Lb\n2-对链表La插入\n3-对链表La删除\n4-对链表La定位\n5-合并链表La和Lb\n6-重建链表La\n7-重建链表Lb\n\n");        if(choice==0)            break;        else if(choice==1)        {            print(l,"La");            print(l2,"Lb");        }        else if(choice==2)        {            cout<<"输入插入元素:"<<endl;            cin>>e;            cout<<"输入插入元素位置:"<<endl;            cin>>i;            insertlist(l,i,e);        }        else if(choice==3)        {            cout<<"输入删除元素位置:"<<endl;            cin>>i;            deletelist(l,i);        }        else if(choice==4)        {            cout<<"输入查找元素:\n";            cin>>e;            locate(l,e);        }        else if(choice==5)            mergelist(l,l2,l3);        else if(choice==6)           createlist(l,"La");        else if(choice==7)           createlist(l2,"Lb");        else            cout<<"请输入正确选项!\n";        printf("选项:\n");    }}

原创粉丝点击