C语言实现链表之单向链表(三)创建链表
2015-11-08 21:05
330 查看
C语言实现链表之单向链表(三)创建链表
上一篇文章已经给出了第一个函数,即为结点分配内存并初始化,这篇文章将给出第二个函数,即创建链表。这个函数比较常用,但是可能需求不一样,下面看程序。/*============================================================================== * 操作 :创建链表 * 操作前:pHeadNode为链表的头结点 * 操作后:读取数据,直到遇到年龄为负数为止,成功返回头结点,失败返回NULL ==============================================================================*/ MyListNode* CreatMyList(MyListNode* pHeadNode) { MyListNode* pNode1 = NULL; MyListNode* pNode2 = pHeadNode; MyListData ListData; // 输入数据 fflush(stdin); // 清空输入缓冲区 printf("Please input the next node's name and age(input the age of <= 0 to end):\n"); scanf("%s %d", ListData.cName, &(ListData.iAge)); while(ListData.iAge > 0) { // 分配结点的内存 pNode1 = MallocMemInitNode(pNode1); if(pNode1 == NULL) { fprintf(stderr, "The allocating memory defeat.\n"); return NULL; } // 将数据元素放入结点中 pNode1->sNodeData = ListData; // 执行链接操作 if(pHeadNode == NULL) { // 直接作为头结点 pHeadNode = pNode1; pNode2 = pHeadNode; } else { pNode2->pNextNodeAddr = pNode1; // 将新结点挂在链表表尾后面 pNode2 = pNode2->pNextNodeAddr; // 指向下一个结点 } // 输入下一个结点的数据 fflush(stdin); // 清空输入缓冲区 printf("Please input the next node's name and age(input the age of <= 0 to end):\n"); scanf("%s %d", ListData.cName, &(ListData.iAge)); } return pHeadNode; }
上面的程序注释十分清楚,强调几点:
(1)这个函数根据输入的参数结点是否为NULL,来判断链表是否已经有头结点,然后进行了不同处理;
(2)这个函数中调用了第一个函数MallocMemInitNode(),用来为结点分配内存并初始化;
(3)这个函数根据数据的年龄是否大于零来判断何时终止终止输入数据;
(4)该函数依然采取了很多错误判断;
(5)注意,最后需要返回头结点。
总之,大家可以根据自己创建链表的习惯进行适当修改。
相关文章推荐
- Lua和C语言的交互详解
- 关于C语言中参数的传值问题
- 简要对比C语言中三个用于退出进程的函数
- 深入C++中API的问题详解
- 基于C语言string函数的详解
- C语言中fchdir()函数和rewinddir()函数的使用详解
- C语言内存对齐实例详解
- 使用C语言判断英文字符大小写的方法
- c语言实现的带通配符匹配算法
- C语言实现顺序表基本操作汇总
- C语言中计算正弦的相关函数总结
- 使用C语言详解霍夫曼树数据结构
- 探讨C语言的那些小秘密之断言
- C语言实现BMP转换JPG的方法
- 深入探讨C语言中局部变量与全局变量在内存中的存放位置
- C语言查找数组里数字重复次数的方法
- C语言泛型编程实例教程
- C语言中使用lex统计文本文件字符数
- 在C语言中转换时间的基本方法介绍
- C语言进制转换代码分享