论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: 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,游戏,试题,问答,编译,视频教程

链表的运算(01)

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

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);       /*调用释放链表函数*/
    }
}

运行结果如下:

----------------------------------------------------------

2.设计一个查找链表中的数据的程序
解:
    单链表中的数据查找,只能采用线性查找法往下一个节点查找。采用线性查找法查找链表中的数据时与数组不同的是,原来数组是用递增数组索引来查找数据,在链表中是往下一个节点查找。
程序代码如下:
#include<stdio.h>
#include<stdlib.h>
#define Max 10
struct List        /*结节点结构声明*/   
{
    int Number;
    int Total;
    struct List *Next;
};
typedef struct List Node;
typedef Node *Link;
int Data[2][Max]=              /*初始化数据*/
        {3,9,25,5,7,26,65,80,2,6,1050,3850,1000,5670,2250,9650,2380,
            1700,3000,2000};
int SearchTime=0;        /*查找次数*/
/*链表查找*/
int List_Search(int Key,Link Head)
{
    Link Pointer;
    Pointer=Head;        /*Pointer指针设为首节点*/
    while(Pointer!=NULL)    /*当节点为NULL结束循环*/
    {
        SearchTime++;
        if(Pointer->Number==Key)
        {
            printf("Data Number: %d\n",Pointer->Number);
            printf("Data Total: %d\n",Pointer->Total);
            return 1;
        }
        Pointer=Pointer->Next;      /*指向下一个节点*/
    }
    return 0;
}
/*释放链表*/
void Free_List(Link Head)
{
    Link Pointer;        /*节点声明*/
    while(Head!=NULL)    /*当节点为NULL结束循环*/
    {
        Pointer=Head;
        Head=Head->Next;    /*指向下一个节点*/
        free(Pointer);
    }
}
/*建立链表*/
Link Create_List(Link Head)
{
    Link New;        /*节点声明*/
    Link Pointer;    /*节点声明*/
    int i;
    Head=(Link)malloc(sizeof(Node));    /*分配内存*/
    if(Head==NULL)
        printf("Memory allocate Failure!\n");    /*内存分配失败*/
    else
    {
        Head->Number=Data[0][0];        /*定义首节点数据编号*/
        Head->Total=Data[1][0];
        Head->Next=NULL;
        Pointer=Head;            /*Pointer指针设为首节点*/
        for(i=1;i<Max;i++)
        {
            New=(Link)malloc(sizeof(Node));    /*分配内存*/
            New->Number=Data[0][i];
            New->Total=Data[1][i];
            New->Next=NULL;
            Pointer->Next=New;        /*将新节点串连在原列表尾端*/
            Pointer=New;              /*列表尾端节点为新节点*/
        }
    }
    return Head;
}
/*主程序*/
void main()
{
    Link Head=NULL;        /*节点声明*/
    int Num;          /*欲查找数据编号*/
    Head=Create_List(Head);    /*建立链表*/
    if(Head!=NULL)
    {
        printf("Please input the data number:");
        scanf("%d",&Num);
        if(List_Search(Num,Head))
            printf("Search Time=%d\n",SearchTime);
        else
            printf("Not Found!\n");
        Free_List(Head);        /*释放链表*/
    }
}
*运行结果如下:

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