顺序表

#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 0
typedef 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");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值