随笔-144  评论-80  文章-1  trackbacks-0

链表的运算(01)

发表日期:2003年4月8日    作者:C语言之家搜集整理  已经有3901位读者读过此文

1.设计一个程序将输入的数据建立成链表、输出链表数据并在程序结束后释放。
2.设计一个查找链表中的数据的程序



1.设计一个程序将输入的数据建立成链表、输出链表数据并在程序结束后释放。
解:
    1)链表的建立:先声明一个首节点Head,并将Head->Next设为NULL。每输入一个数据就声明一个新节点New,把New->Next设为NULL,并且链接到之前列表的尾端。
    2)链表数据的输出:先将Pointer节点的指针指向第一个节点,将Pointer节点(即第一个节点)的数据输出。然后再将Pointer节点的指针指向Pointer指针的的指针(即下一节点),将pointer节点(即第一节点)的数据输出。重复执行此步聚直到Pointer指针指向NULL为止。
    3)链表的释放:先将Pointer节点的指针指向第一个节点,然后再将首节点设为首节点的指针(即下一节点)。将Pointer节点(即第一节点)释放。重复执行此步聚直到首节点的指针指向NULL为止。
程序代码如下:
#include<stdlib.h>
#include<stdio.h>
#define Max 10
struct List             /*节点结构声明*/
{
    int Number;
    char Name[Max];
    struct List *Next;
};
typedef struct List Node;
typedef Node *Link;
/*释放链表*/
void Free_List(Link Head)
{
    Link Pointer;      /*节点声明*/
    while(Head!=NULL)      /*当节点为NULL,结束循环*/
    {
        Pointer=Head;
        Head=Head->Next;   /*指向下一个节点*/
        free(Pointer);
    }
}
/*输出链表*/
void Print_List(Link Head)
{
    Link Pointer;          /*节点声明*/
    Pointer=Head;          /*Pointer指针设为首节点*/
    while(Pointer!=NULL)   /*当节点为NULL结束循环*/
    {
        printf("##Input Data##\n");
        printf("Data Number: %d\n",Pointer->Number);
        printf("Data Name: %s\n",Pointer->Name);
        Pointer=Pointer->Next;     /*指向下一个节点*/
    }
}
/*建立链表*/
Link Create_List(Link Head)
{
    int DataNum;         /*数据编号*/
    char DataName[Max];        /*数据名称*/
    Link New;            /*节点声明*/
    Link Pointer;        /*节点声明*/
    int i;
    Head=(Link)malloc(sizeof(Node));     /*分配内存*/
    if(Head==NULL)
        printf("Memory allocate Failure!\n");    /*内存分配夫败*/
    else
    {
        DataNum=1;      /*初始数据编号*/
        printf("Please input the data name:");
        scanf("%s",DataName);
        Head->Number=DataNum;     /*定义首节点数据编号*/
        for(i=0;i<=Max;i++)
            Head->Name[i]=DataName[i];
        Head->Next=NULL;
        Pointer=Head;          /*Pointer指针设为首节点*/
        while(1)
        {
            DataNum++;         /*数据编号递增*/
            New=(Link)malloc(sizeof(Node));     /*分配内存*/
            printf("Please input the data Name:");
            scanf("%s",DataName);
            if(DataName[0]=='0')    /*输入0则结束*/
                break;
            New->Number=DataNum;
            for(i=0;i<Max;i++)
            {
                New->Name[i]=DataName[i];
            }
            New->Next=NULL;
            Pointer->Next=New;     /*将新节点串连在原列表尾端*/
            Pointer=New;         /*列表尾端节点为新节点*/
        }
    }
    return Head;
}
/*主程序*/
void main()
{
    Link Head;       /*节点声明*/
    Head=Create_List(Head);     /*调用建立链表函数*/
    if(Head!=NULL)
    {
        Print_List(Head);      /*调用输出链表数据函数*/
        Free_List(Head);       /*调用释放链表函数*/
    }
}

运行结果如下:

posted on 2006-07-17 22:53 小力力力 阅读(2638) 评论(0)  编辑  收藏 所属分类: C/C++

只有注册用户登录后才能发表评论。


网站导航: