3.2.3 单链表的建立与释放

代码如下:
注意点:本程序在VS2010下,114行"   Link Head =  NULL // Node声明并初始化" 的Head必须初始化后才能作为参数传递给Create_List函数,但在GCC编译器下,可以不进行初始化,为了兼顾兼容,严谨性,最好事先初始化。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/***********************************************************/
// 程序名称:createList.cpp
// 程序目的:设计一个将输入的数据建立成链表的程序
// 程序来源:数据结构(C语言版) P-60
// 日期:2013-8-13 16:12:30
/***********************************************************/


#include <stdio.h>
#include <stdlib.h>
#define Max  10
struct List          // Node声明
{
     int Number;
     char Name[Max];
     struct List* Next;
};
typedef  struct List Node;
typedef Node* Link;

/************************************************************************/
// 释放链表                             
/************************************************************************/

void Free_List(Link Head)
{
    Link Pointer;

     while ( NULL != Head)
    {
        Pointer = Head;
        Head = Head->Next;   // 下一个节点
        free(Pointer);
    }

     return;
}

/************************************************************************/
// 输出链表数据
/************************************************************************/

void Print_List(Link Head)
{
    Link Pointer;
    Pointer = Head;
     while ( NULL != Pointer)
    {
        printf( "\n #####输出数据##### \n");
        printf( "数据编号:%d\n", Pointer->Number);
        printf( "数据名称:%s\n", Pointer->Name);
        Pointer = Pointer->Next;
    }
     return;
}

/************************************************************************/
// 建立链表
/************************************************************************/

Link Create_list(Link Head)
{
     int DataNum;         // 数据编号
     char DataName[Max];  // 数据名称
    Link New;            // 节点声明
    Link Pointer;
     int i;

    Head = (Link)malloc( sizeof(Node));   // 内存配置

     if ( NULL == Head)
        printf( "内存分配失败!!\n");
     else
    {
        DataNum =  1;             // 初始数据编号
        Head->Number = DataNum;  // 首节点数据编号

        printf( "请输入数据名称: ");
        scanf( "%s", DataName);
         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));
             if ( NULL != New)
            {
                printf( "请输入数据名称: ");
                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;
            }
             else
                printf( "内存分配失败!!\n");

            Pointer->Next = New;         // 新节点串接在原列表尾端
            Pointer = New;           // 列表尾端为新节点
        }
    }
     return Head;
}

/************************************************************************/
// 主程序                                                               
/************************************************************************/

int main( void)
{
    Link Head =  NULL;                // Node声明并初始化
    Link New_List;
    New_List = Create_list(Head);    // 建立链表

     if (New_List !=  NULL)
    {
        Print_List(New_List);
        Free_List(New_List);
    }

     return  0;
}
生成结果:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值