#include<iostream>
#include<malloc.h>
using namespace std;
#define Initsize 100
#define Addsize 10
struct list
{
int *a;//存储空间基址
int length;//当前表长
int listsize;//当前分配的存储长度
};
int initlist(list &l);//初始化
int insert_(list l); //插入
int delete_(list &l);//删除
void mergelist(list la,list lb,list &lc);//合并两个非递减有序表
void display(list &l);//输出
int main ()
{
list L,la,lb,lc;
if(initlist(L)!=1)//初始化成功返回值为1
{
return -1;
}
for(int j=0;j<10;j++)
{
L.a[j]=j;
L.length++;
}
initlist(la);
initlist(lb);
la=L;
lb=L;
cout<<"初始表如下:"<<endl;
display(L);
mergelist(la,lb,lc);
cout<<"合并后如下:"<<endl;
display(lc);
insert_(L);
cout<<"插入成功,结果如下:"<<endl;
display(L);
delete_(L);
cout<<"删除成功,结果如下:"<<endl;
display(L);
}
int initlist(list &l)
{
l.a=(int *)malloc(Initsize*sizeof(int));
if(!l.a) exit(-2);//存储分配失败
l.length=0;
l.listsize=Initsize;
return 1;
}
void display(list &l)
{
if(l.length==0)
{
cout<<"NULL"<<endl;
}
for(int i=0;i<l.length;i++)
{
cout<<l.a[i]<<" ";
}
cout<<endl;
}
int insert_(list l)
{
int *p, *q;
int n=1;
int i,e;
cout<<"请输入要插入到的位置:";
cin>>i;
while(n)
{
if(i<1||i>l.length+1)
{
cout<<"i值不合理,请重新输入:";
cin>>i;
}
else n=0;
}
cout<<"请输入要插入的值:";
cin>>e;
if(l.length>=l.listsize)
{
int *newbase;
newbase =(int *)realloc(l.a,(l.listsize+Addsize)*sizeof(int));//再分配
if(!newbase) exit(-2);
l.a=newbase;
l.listsize+=Addsize;
}
q=&(l.a[i-1]);
for(p=&(l.a[l.length-1]);p>=q;p--)
*(p+1)=*p;
*q=e;
l.length++;
return 1;
}
int delete_(list &l)
{
int *p, *q;
int n=1;
int i,e;
cout<<"请输入要删除第几个元素:";
cin>>i;
while(n)
{
if(i<1||i>l.length+1)
{
cout<<"i值不合理,请重新输入:";
cin>>i;
}
else n=0;
}
p=&(l.a[i]);
e=*p;
q=l.a+l.length-1;
for(p;p<=q;p++) *(p-1)=*p;
l.length--;
return 1;
}
void mergelist(list la,list lb,list &lc)
{
int *pa,*pb,*pc;
int *pa_last,*pb_last;
pa=la.a;
pb=lb.a;
lc.listsize=lc.length=la.length+lb.length;
pc=lc.a=(int *)malloc(lc.listsize*sizeof(int));
if(!lc.a) exit(-2);
pa_last=la.a+la.length-1;
pb_last=lb.a+lb.length-1;
while(pa<=pa_last&&pb<=pb_last)
{
if(*pa<=*pb) *pc++=*pa++;
else *pc++=*pb++;
}
while(pa<=pa_last) *pc++=*pa++;
while(pb<=pb_last) *pc++=*pb++;
}
线性表的顺序表示和实现
最新推荐文章于 2024-09-11 19:57:20 发布