⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 链表的合并.txt

📁 这是初次学数据结构时有关链表的实现
💻 TXT
字号:
//这是链表合并的链式序实现
#include <stdio.h>  
#include <stdlib.h>  

#define NUll 0 
#define OVERFLOW -2 
  
typedef struct L {int num;  struct L *next;} L, *LinkList; 
 
struct L *CreatList (LinkList &m,int i) 
{ 

int j; 
LinkList p ,s ; 
LinkList head=NULL; 
int a[4]={3,5,8,11}; 
int b[7]={2,6,8,9,11,15,20}; 
if(!(m=(LinkList)malloc(sizeof(L)))) 
  printf("分配空间失败1"),exit(OVERFLOW); 
m->next=NULL; 
p=m; 
if(i==3) 
{ 
 for(j=0;j<=3;j++) 
 { 
   if(!(s=(LinkList)malloc(sizeof(L)))) 
      printf("分配空间失败2"),exit(OVERFLOW); 
      s->num=a[j]; 
      s->next=NULL; 
      p->next=s; 
      p=s; 
 } 
} 
else  
{ 
  for(j=0;j<=6;j++) 
  { 

    if(!(s=(LinkList)malloc(sizeof(L)))) 
       printf("分配空间失败3"),exit(OVERFLOW); 
    s->num=b[j]; 
    s->next=NULL; 
    p->next=s; 
    p=s; 
  } 

} 
return(m); 
} 
struct L * Insert(LinkList x,LinkList y,LinkList &z) 
{ 
 int i=0,j=0; 
 LinkList p,q; 
 if(!(z=(LinkList)malloc(sizeof(L))))
    printf("分配空间失败4"),exit(OVERFLOW); 
 z->next=NULL; 
 q=z;
 x=x->next;
 y=y->next;
 while(i<=3&&j<=6) 
 { 
 if(x->num<=y->num) 
 {  
   if(!(p=(LinkList)malloc(sizeof(L))))
        printf("分配空间失败5"),exit(OVERFLOW); 
   p->num=x->num; 
   p->next=NULL; 
   q->next=p; 
   q=p; 
   x=x->next;
   i++; 
 }
 else 
 {   
  if(!(p=(LinkList)malloc(sizeof(L)))) 
        printf("分配空间失败6"),exit(OVERFLOW); 
  p->num=y->num; 
  p->next=NULL; 
  q->next=p; 
  q=p;
  y=y->next;
  j++; 
 }
 }
 while(i<=3) 
 {    if(!(p=(LinkList)malloc(sizeof(L))))
        printf("分配空间失败7"),exit(OVERFLOW); 
     p->num=x->num; 
     p->next=NULL; 
     q->next=p; 
     q=p;
  x=x->next;
     i++; 
 } 
 while(j<=6) 
 {     if(!(p=(LinkList)malloc(sizeof(L)))) 
        printf("分配空间失败8"),exit(OVERFLOW); 
       p->num=y->num; 
       y=y->next;
       p->next=NULL; 
       q->next=p; 
       q=p; 
       j++; 
 } 
return(z); 
} 
void main() 
{   int i; 
    LinkList LA=NULL,LB=NULL,LC=NULL; 
    CreatList (LA,3); 
    CreatList (LB,5); 
    Insert(LA,LB,LC); 
    for(i=1;i<=11;i++) 
 {LC=LC->next; printf("%d\n",LC->num);} 
} 







//这是链表合并的顺序实现

#include <stdio.h>
#include <stdlib.h>

#define NULL 0
#define OVERFLOW -2
#define List_Create_Size 100
//#define  ListIncreament  10


typedef struct
{int *elem;int length;int listsize;}Sqlist;

Sqlist CreateList_Sq(Sqlist &L)

{
  int i=0;
 
  L.elem=(int *)malloc(List_Create_Size*sizeof(int));//为指针分配内存空间。
 
  if(!L.elem) exit(OVERFLOW);
  L.listsize=List_Create_Size;
  L.length=0;
  printf("请向表中输入数据以-1000结束\n");
  scanf("%d",&L.elem[i]);
  while (L.elem[i]!=-1000)
  {
  L.length=L.length+1;
  ++i;
  scanf("%d",&L.elem[i]);
 
 
  }
 
return (L);//返回
}
//此函数的功能是将两个链表LA和LB按从小到大顺序依次插入到空链表LC中并返回LC的值
Sqlist InSertList(Sqlist LA,Sqlist LB,Sqlist &LC)
{
    int i=0,j=0,k=0;

 
 LC.elem=(int *)malloc(List_Create_Size*sizeof(int));
 LC.length=0;
 LC.listsize=List_Create_Size;
  
 while((i<LA.length)&&(j<LB.length))
 {   
  if(LA.elem[i]<=LB.elem[j])
  {
            LC.elem[k]=LA.elem[i];
         i++;
   k++;
   LC.length+=1;
  }
  else
  {
      LC.elem[k]=LB.elem[j];
         j++;
   k++;
   LC.length+=1;
  }
 
 
 }
 
 while(i<LA.length)
 {       LC.elem[k]=LA.elem[i];
         i++;
   k++;
   LC.length+=1;
 
 }
 
 while(j<LB.length)
 { LC.elem[k]=LB.elem[j];
         j++;
   k++;
   LC.length+=1;
 
 }
 return(LC);
}
void main()
{
    int i;
 Sqlist LA,LB,LC;
   
    CreateList_Sq(LA);
    CreateList_Sq(LB);
    InSertList( LA, LB, LC);
    printf("合并后链表中的元素为");
 for(i=0;i<LC.length;i++)
 {
  
  printf("%d\n",LC.elem[i]);
 
 }


}

 



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -