早教吧 育儿知识 作业答案 考试题库 百科 知识分享

来个牛人帮我做题吧~1,假设有两个按元素值递增次序排列的线性表,均以单链表形式存储.请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的

题目详情
来个牛人帮我做题吧~
1,假设有两个按元素值递增次序排列的线性表,均以单链表形式存储.请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表.
节点结构:
typedef struct node{
int data;
struct node *next;
} linknode,*link;
link Union(link la,lb)
2,typedef struct node
{int data; struct node *next;
}linknode,*link;
bool inclusion(link ha,link hb):boolean;
/*以ha和hb为头指针的带头节点单链表分别表示递增有序表A和B,本算法判别表A是否包含在表B内,若是,则返回“true”,否则返回“false”*/
{
pa=ha->next; pb=hb->next; (1) ;
while ((2) )
{
if (pa->data==pb->data )
(3);
else
(4) ;
}
(5) ;
}
▼优质解答
答案和解析
#include
#include
typedef struct node
{ int data;
 struct node *next;
}linknode,*link; 
link Union(link la,link lb)   //甯﹀ご鑺傜偣
{ link  pa,pb,pc,hc,temp;
 hc=la;
 pc=hc;
 pa=la->next;
 pb=lb->next;
 while(pa && pb)
 {
  if(pa->datadata)
  {
   pc->next=pa;
   pc=pa;
   pa=pa->next;
   
  }
  else
  {
   pc->next=pb;
   pc=pb;
   pb=pb->next;
  }
 }
 if(pa!=NULL)
  pc->next=pa;
 if(pb!=NULL)
  pc->next=pb;
 //鍙嶈浆閾捐〃
 pc=hc->next;
 pb=NULL;
 while(pc)
 {
  temp=pc;
  pc=pc->next;
  temp->next=pb;
  pb=temp;
 }
 hc->next=pb;
 return  hc;
}
//娴嬭瘯
void main()
{ void create(link &head,int *arr,int num);
 int arr1[]={ 3,5,8,11};
 int arr2[]={2,6,8,9,11,15,20};
 link  la,lb;
 create(la,arr1,4);
 create(lb,arr2,7);
 la=Union(la,lb);
 la=la->next;
 while(la)
 {
  printf("[%2d]  ",la->data);
  la=la->next;
 }
 system("pause");
}
void create(link &head,int *arr,int num)
{ link ptr;
 head=(link ) malloc(sizeof(struct node));
 if(head==NULL)
 {
  exit(1);
 }
 head->next=NULL;
 ptr=head;
 for(int i=0;i { 
  ptr->next=(link ) malloc(sizeof(struct node));
  if(ptr->next==NULL)
  {
   exit(1);
  }
  ptr->next->next=NULL;
  ptr->next->data=arr[i];
  ptr=ptr->next;
 }

//  ######################################################
//绗?簩涓?
#include
#include
typedef struct node
{ int data;
 struct node *next;
}linknode,*link; 
//娴嬭瘯
void main()
{ void create(link &head,int *arr,int num);
 bool inclusion(link ha,link hb);
 //int arr1[]={ 3,5,8,11};
 //int arr2[]={2,6,8,9,11,15,20};
 int arr1[]={4,9};
 int arr2[]={3,4,4,5,7,9};
 link  la,lb;
 create(la,arr1,2);
 create(lb,arr2,6);
 if(inclusion(la,lb))
  printf("\n鏄痋n");
 printf("\n");
 system("pause");
}
void create(link &head,int *arr,int num)
{ link ptr;
 head=(link ) malloc(sizeof(struct node));
 if(head==NULL)
 {
  exit(1);
 }
 head->next=NULL;
 ptr=head;
 for(int i=0;i { 
  ptr->next=(link ) malloc(sizeof(struct node));
  if(ptr->next==NULL)
  {
   exit(1);
  }
  ptr->next->next=NULL;
  ptr->next->data=arr[i];
  ptr=ptr->next;
 }
}
bool inclusion(link ha,link hb)
{
 link pa,pb;
 pa=ha->next;
 pb=hb->next;
 while(pa && pb)
  {
   if(pa->data==pb->data)
   {
    pa=pa->next;
    pb=pb->next;
   }
   else 
    pb=pb->next;
  } 
  if(pa==NULL)
   return true;
  else
   return false;
}