📄 链表的合并.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 + -