论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

链表的运算(04)

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:45:41

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);
    }
}
*运行结果如下:

上一篇:{应用}马踏棋盘问题 人气:6421
下一篇:{应用}链表的运算(05) 人气:6293
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058