您的位置:首页 > 编程语言 > C语言/C++

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)注意,最后需要返回头结点。

    总之,大家可以根据自己创建链表的习惯进行适当修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息