7.链表的比较 解: 链表的比较是用于判定两个链表内的数据是否相等。首先找到第一个链表的首节点与第二个链表的首节点,依次比较其节点内容,直到某一个链表到达尾端为止。 *程序代码如下: #include<stdio.h> #include<stdlib.h> #define Max1 10 #define Max2 10 #define Max3 6 struct List /*节点结构声明*/ { int Number; struct List *Next; }; typedef struct List Node; typedef Node *Link; int Data1[Max1]={1,2,3,4,5,6,7,8,9,10}; int Data2[Max2]={1,2,5,4,3,7,6,10,9,8}; int Data3[Max3]={1,2,3,4,5,6}; /*比较链表内容*/ void Compare_List(Link Head1,Link Head2) { Link Pointer1; /*节点声明*/ Link Pointer2; Pointer1=Head1; /*Pointer1指针设为第一个链表首节点*/ Pointer2=Head2; /*Pointer2指针设为第二个链表首节点*/ while(1) { if((Pointer1->Next==NULL)&&(Pointer2->Next==NULL)) /*当两个链表指针都达到尾端时,表示两个链表相等*/ { printf("\n##EQUAL!##\n"); break; } if(Pointer1->Number!=Pointer2->Number) /*当两个链表节点内容不同时,表示不相等*/ { printf("\n[%d]<>[%d]\n",Pointer1->Number,Pointer2->Number); printf("##NOT EQUAL!##\n"); break; } else /*节点内容相等时,指向下一个节点*/ { printf("[%d]",Pointer1->Number); Pointer1=Pointer1->Next; Pointer2=Pointer2->Next; } } } /*输出链表数据*/ void Print_List(Link Head) { Link Pointer; /*节点声明*/ Pointer=Head; /*Pointer指针设为首节点*/ while(Pointer!=NULL) /*当节点为NULL结束循环*/ { printf("[%d]",Pointer->Number); Pointer=Pointer->Next; /*往下一节点*/ } printf("\n"); } /*释放链表*/ void Free_List(Link Head) { Link Pointer; /*节点声明*/ while(Head!=NULL) /*当节点为NULL结束循环*/ { Pointer=Head; Head=Head->Next; /*指向下一节点*/ free(Pointer); } } /*建立链表*/ Link Create_List(Link Head,int *Data,int Max) { Link New; /*节点声明*/ Link Pointer; int i; Head=(Link)malloc(sizeof(Node)); /*分配内存*/ if(Head==NULL) printf("Memory allocate Failure!\n"); /*内存分配失败*/ else { Head->Number=Data[0]; /*定义首节点数据编号*/ Head->Next=NULL; Pointer=Head; for(i=1;i<Max;i++) { New=(Link)malloc(sizeof(Node)); /*分配内存*/ New->Number=Data[i]; New->Next=NULL; Pointer->Next=New; /*将新节点串连在原列表尾端*/ Pointer=New; /*列表尾端节点为新节点*/ } } return Head; } /*主程序*/ void main() { Link Head1=NULL; /*节点声明*/ Link Head2=NULL; Link Head3=NULL; Head1=Create_List(Head1,Data1,Max1); /*建立链表1*/ Head2=Create_List(Head2,Data2,Max2); /*建立链表2*/ Head3=Create_List(Head3,Data3,Max3); /*建立链表3*/ if(Head1!=NULL&&Head2!=NULL&&Head3!=NULL) { printf("Linked List 1:"); Print_List(Head1); /*输出链表1*/ printf("Linked List 2:"); Print_List(Head2); /*输出链表2*/ printf("Linked List 3:"); Print_List(Head3); /*输出链表3*/ printf("Linked List 1 compare with Linked List 1\n"); Compare_List(Head1,Head1); /*比较链表*/ printf("Linked List 1 compare with Linked List 2\n"); Compare_List(Head1,Head2); /*比较链表*/ printf("Linked List 1 compare with Linked List 3\n"); Compare_List(Head1,Head3); /*比较链表*/ Free_List(Head1); /*释放链表*/ Free_List(Head2); Free_List(Head3); } } *运行结果如下:
视频教程列表
文章教程搜索
C语言程序设计推荐教程
C语言程序设计热门教程
|