主题:严老师的数据结构算法2.20-2.21 P37.txt
#include<stdio.h>
#define M 20
struct LNode{
int data;
struct LNode *next;
}La[M],Lb[M];
struct Link{
LNode *head,*tail;
int len;
}A,B;
void InitList(Link &L)
{
L.head=NULL;
L.tail=NULL;
L.len=0;
}
void InsFirst(Link &L,LNode h[M])
{
if(L.len==0)
{
L.head=&h[0];
scanf("%d",&(L.head->data));
L.len++;
}
else
{
L.tail=&h[L.len];
scanf("%d",&(L.tail->data));
L.tail->next=NULL;
L.len++;
}
}
LNode DelFirst(Link L,LNode &h)
{
h=(*L.head);
L.head=L.head->next;
h.next=NULL;
return h;
}
void Append(Link &L1,LNode &h)
{
L1.tail->next=&h;
while(L1.tail->next!=NULL)
L1.tail=L1.tail->next;
}
int GetCurElem(LNode p)
{
return p.data;
}
LNode *GetHead(Link &L)
{
return L.head;
}
LNode *NextPos(Link L,LNode *p)
{
LNode *q=L.head;
while(q->next!=NULL&&q!=p)
p=p->next;
if(q->next==NULL)
{
return NULL;
}
else
{
p=q->next;
return p;//有问题我找些资料来看看才知道怎么解决,
}
}
void MergeList_L(Link &A,Link &B)
{
Link C;
InitList(C);
LNode *ha,*hb,*pa,*pb,q;
int a,b;
ha=GetHead(A);
hb=GetHead(B);
pa=NextPos(A,ha);
pb=NextPos(B,hb);
while(pa&&pb)
{
a=GetCurElem(*pa);
b=GetCurElem(*pb);
if(a<b)
{
DelFirst(A,q);
Append(C,q);
pa=NextPos(A,pa);
}
else
{
DelFirst(B,q);
Append(C,q);
pb=NextPos(B,pb);
}
}
if(pa)
Append(C,*pa);
else
Append(C,*pb);
}
void main()
{
InitList(A);
InitList(B);
int m,n;
printf("输入A,B的个数:");
scanf("%d %d",&m,&n);
for(int i=0;i<m; i++)
{
InsFirst(A,La);
}
for(i=0; i<n; i++)
{
InsFirst(B,Lb);
}
MergeList_L(A,B);
}
这程序里目前有个BUG还没有解决,如果有朋友能解决有话,帮忙解决下[em8]
#define M 20
struct LNode{
int data;
struct LNode *next;
}La[M],Lb[M];
struct Link{
LNode *head,*tail;
int len;
}A,B;
void InitList(Link &L)
{
L.head=NULL;
L.tail=NULL;
L.len=0;
}
void InsFirst(Link &L,LNode h[M])
{
if(L.len==0)
{
L.head=&h[0];
scanf("%d",&(L.head->data));
L.len++;
}
else
{
L.tail=&h[L.len];
scanf("%d",&(L.tail->data));
L.tail->next=NULL;
L.len++;
}
}
LNode DelFirst(Link L,LNode &h)
{
h=(*L.head);
L.head=L.head->next;
h.next=NULL;
return h;
}
void Append(Link &L1,LNode &h)
{
L1.tail->next=&h;
while(L1.tail->next!=NULL)
L1.tail=L1.tail->next;
}
int GetCurElem(LNode p)
{
return p.data;
}
LNode *GetHead(Link &L)
{
return L.head;
}
LNode *NextPos(Link L,LNode *p)
{
LNode *q=L.head;
while(q->next!=NULL&&q!=p)
p=p->next;
if(q->next==NULL)
{
return NULL;
}
else
{
p=q->next;
return p;//有问题我找些资料来看看才知道怎么解决,
}
}
void MergeList_L(Link &A,Link &B)
{
Link C;
InitList(C);
LNode *ha,*hb,*pa,*pb,q;
int a,b;
ha=GetHead(A);
hb=GetHead(B);
pa=NextPos(A,ha);
pb=NextPos(B,hb);
while(pa&&pb)
{
a=GetCurElem(*pa);
b=GetCurElem(*pb);
if(a<b)
{
DelFirst(A,q);
Append(C,q);
pa=NextPos(A,pa);
}
else
{
DelFirst(B,q);
Append(C,q);
pb=NextPos(B,pb);
}
}
if(pa)
Append(C,*pa);
else
Append(C,*pb);
}
void main()
{
InitList(A);
InitList(B);
int m,n;
printf("输入A,B的个数:");
scanf("%d %d",&m,&n);
for(int i=0;i<m; i++)
{
InsFirst(A,La);
}
for(i=0; i<n; i++)
{
InsFirst(B,Lb);
}
MergeList_L(A,B);
}
这程序里目前有个BUG还没有解决,如果有朋友能解决有话,帮忙解决下[em8]