for(;p;p=p->next)
cout< cout<<\本次测试的类型为int\LIST L=NULL,L1=NULL,L2=NULL; Read(L1,1); cout<<\的元素为:\ Write(L1); Read(L2,2); cout<<\的元素为:\Write(L2); Merge(L,L1,L2); cout<<\合并后L的元素为:\Write(L); /* LIST L=NULL,L1=NULL; read(L); cout<<\原有的元素:\write(L); copy(L1,L); cout<<\复制之后的元素:\write(L1); LIST head=NULL; read(head); cout<<\删除前:\ cout<<\请输入要删除的数据:\Elementtype x; cin>>x; int m=Delete(head,x); cout<<\删除后:\write(head); if(m==-1) cout<<\需要删除的数不存在\ else cout<<\需要删除的数是第\个\ */ } //线性表的数组实现-线性表的合并 #include #define maxlength 100 typedef int position;//位置类型 typedef int Elementtype;//下标类型 struct LIST { Elementtype elements[maxlength]; int last;//最后一个元素的下标 }; position End(LIST L)//线性表的长度 { return (L.last+1); } void Insert(Elementtype x,position p,LIST &L) //在表L的位置p处插入x { position q; if(L.last>=maxlength-1) cout<<\ else if((p>L.last+1) || (p<1)) cout<<\ else { for(q=L.last;q>=p;q--) L.elements[q+1]=L.elements[q]; L.last=L.last+1; L.elements[p]=x; } } void Delete(position p,LIST &L) //删除位置p处的元素 { position q; i f((p>L.last+1) || (p<1)) cout<<\ else { L.last=L.last-1; for(q=p;q<=L.last;q++) L.elements[q]=L.elements[q+1]; } } position Locate(Elementtype x,LIST L) //返回x在表L中的位置 { position q; for(q=0;q return q; return (L.last+1); //x不存在 } Elementtype Retrive(position p,LIST L) //返回L中位置为p的元素 { if((p<1) || (p>L.last+1)) { cout<<\ return -1; } return L.elements[p]; } //====================================================== //将两个线性表合并 void Merge(LIST &L,LIST L1,LIST L2) { position p,p1,p2; position len1=End(L1);//L1的长度 position len2=End(L2);//L2的长度 L.last=len1+len2-1;//合并后L的最后一个元素的位置 p=p1=p2=0 for(;p1 { L.elements[p]=L1.elements[p1]; p++; p1++; } for(;p2 { L.elements[p]=L2.elements[p2]; p++; p2++; } } void Read(LIST &L,int i) //输入线性表 { cout<<\请输入第\个线性表的长度:\ cout<<\请输入第\个线性表的元素:\ for(position p=0;p<=L.last;p++) cin>>L.elements[p]; } void Write(LIST L) //输出线性表 { cout<<\线性表的长度为:\线性表的元素为:\ for(position p=0;p<=L.last;p++) cout< void main() { cout<<\本次测试的类型为int\ LIST L,L1,L2; Read(L1,1); Read(L2,2); Merge(L,L1,L2); Write(L); } 六、写出一个将两个静态链表(属于同一个存储池)合并的算法函数: void Merge(cursor M, cursor N); 合并的方法是将N链表中的所有结点添加到M链表的后面,并将N链表的表头结点添加到空闲结点链表中。 要求:1、定义静态链表的结点的结构以及结点的型SPACE以及位置(position)和游标(cursor)的型。 2、定义静态链表的基本操作:void Initialize(); 初始化,将所有存储池中的结点设置为空闲;cursor GetNode(); 从空闲链中获取一个结点;void FreeNode(cursor q); 将结点q加入到空闲链; void Insert ( elementtype x, position p, cursor M ); 在链表M中的位置为p的元素后面添加一个值为x的结点;void Delete (cursor M, position p ); 在链表M中删除位置为p的元素的后一个元素。 3、在1、2的基础上完成本题。 4,在main函数中进行测试:先构建一个存储池,然后在该存储池中创建两个静态表,最后将这两个静态表合并。 #include #define maxsize 100 typedef int elementtype; typedef struct { elementtype element int next } spacestr; /*结点类型*/ spacestr SPACE[ maxsize ] /*存储池*/ typedef int position, cursor; cursor available;/* 标识线性表/空闲池*/ void Initialize() { int j; /* 依次链接池中结点*/ for (j=0; j SPACE[j].next=-1;/* 最后一个接点指针域为空*/ available=0;/* 标识线性表,将所有存储池中的结点设置为空闲,avilable为头结点,不利用*/ } // 可用空间的分配操作,从空闲链中获取一个结点 cursor GetNode() // q=new spacest { cursor p; if (SPACE[available].next ==-1) p=-1; else { p= SPACE[available].next SPACE[available].next = SPACE[ p ].next } return p; }/* 将空闲池头结点的下一个节点从空闲池中删除*/ void FreeNode(cursor q) //delete q; { SPACE [ q ].next =SPACE[available].next SPACE[available].next = q }/* 将q指向的节点放回池中*/ // 在位置p后面插入元素值为x的结点 void Insert ( elementtype x, position p) { position q q = GetNode( ) SPACE[ q ].element = x SPACE[ q ].next = SPACE[ p ].next SPACE[ p ].next = q } // 删除位置p后的一个结点 void Delete ( position p) { position q; if ( SPACE[ p ].next != -1 ) { q = SPACE[ p ].next ; SPACE[ p ].next = SPACE[ q ].next ; FreeNode( q ) } } //创建静态链表 void Create(cursor M) { elementtype input; position p = M; while(1) { cout<<\请输入静态链表的值,输入-1结束:\ cin>>input; if(input != -1) { I nsert(input,p); p = SPACE[p].next; } else break; } } void Merge(cursor M,cursor N) //连接两个链表,将N链表中的所有结点添加到M链表的后面,并将N链表的表头结点添加到空闲结点链表中 { position p; p=M; while(SPACE[p].next!=-1) p=SPACE[p].next; position q; q=SPACE[N].next; SPACE[p].next=q; FreeNode(N); } //输出静态链表 void Print(cursor M) { position p; p = M; while(SPACE[p].next != -1) { cout< spacestr s; Initialize(); position p=GetNode(); cursor M=GetNode(); SPACE[M].next = -1; cursor N=GetNode(); SPACE[N].next = -1; cout<<\创建静态链表M:\Print(M); cout<<\创建静态链表N:\ Create(N); Print(N); cout<<\将M和N合并后:\