随笔-144  评论-80  文章-1  trackbacks-0
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);        /*释放链表*/
    }
}
*运行结果如下:

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

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


网站导航: