当前位置:
文档之家› C语言实现单链表的合并 归并算法
C语言实现单链表的合并 归并算法
for(p=(*LC)->next;p!=NULL;p=p->next)
for(q=p->next,r=p;q!=NULL;q=q->next) if(q->data==p->data) { r->next=q->next; free(q); q=r; } else r=r->next;
}
void MergeList(LinkList *LA,LinkList *LB,LinkList *LC) { /*归并算法*/
void EnterList(LinkList &L) //尾插法创建单链表。 {
Node *s,*r; int flag=1,integer; r=L; while(flag) {
scanf("%d",&integer);
if(integer != -1) {
s=(Node*)malloc(sizeof(Node)); s->data=integer; r->next=s; r=s; } else { flag=0; r->next=NULL; } } }
#include<stdio.h> #include<stdlib.h> typedef struct Node {
int data; struct Node *next; }Node, *LinkList; LinkList LA,LB,LC; void InitList(LinkList *L) //初始化单链表 { *L=(LinkList)malloc(sizeof(Node)); (*L)->next=NULL; }
void main() {
first (); decide(); }
p=p->next;
}
printf("\n");
}
void DestroyList(LinkList *L) //清空链表
{ Node *p,*r; p=*L;
while(!p->next)
{
r=p;
ห้องสมุดไป่ตู้
p=p->next;
free(r); }
printf("删除成功!"); }
void first() {
} while (q) {
y=(Node*)malloc(sizeof(Node)); y->data=q->data; r->next=y; r=y; q=q->next; } r->next=NULL; } void DeSameList(LinkList *LC)//删除 c 表的相同元素。 { Node *p,*q,*r;
void UnionList(LinkList &LA,LinkList &LB,LinkList &LC) {
Node *p,*q,*r,*y; p=LA->next; q=LB->next; r=LC; while (p)
{ y=(Node*)malloc(sizeof(Node)); y->data=p->data; r->next=y; r=y; p=p->next;
printf("请输入顺序表 LA(当输入-1 时结束):\n"); InitList(&LA); EnterList(LA);
printf("请输入顺序表 LB(当输入-1 时结束):\n"); InitList(&LB); EnterList(LB); printf("表 LA 和表 LB 合并后表 LC 为:"); InitList(&LC); UnionList(LA,LB,LC); DeSameList(&LC); printList(&LC); printf("表 LA 和表 LB 归并后表 LC 为:"); MergeList(&LA,&LB,&LC); printList(&LC); }
} else {
r->next=q; r=q; q=q->next; } r->next=p?p:q; } free(*LB);
}
void printList(LinkList *L) {
Node *p=(*L)->next;
while(p!=NULL)
{
printf("%3d",p->data);
Node *p,*q,*r; p=(*LA)->next; q=(*LB)->next; *LC=*LA; (*LC)->next=NULL; r=*LC; while(p != NULL && q !=NULL) {
if(p->data <= q->data)
{ r->next=p; r=p; p=p->next;
void decide() {int s;printf("1 重新开始\n2 退出\n"); scanf("%d",&s);
if(s==1){system("cls"); first();}
else if(s==2)exit(0); else printf("Error!!! try again,!"); decide(); }