代码如下:
注意点:本程序在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; } |