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

C语言学习历程——编程练习3——04

2017-05-04 12:24 281 查看
4. 程序功能:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中。



分析:创建节点的同时将数据写入节点



下面是代码实现:

/**********************************************************************************************

  程序功能:建立一个带有头结点的单向链表,并将存储在数组中的字符依次转储到链表的各个结点中。

**********************************************************************************************/

#include <stdio.h>

#include <stdlib.h>

struct node

{
int num;
struct node *next; 

};

typedef struct node Node;

typedef struct node *Link;

void CreatLink(Link *head)

{
*head = NULL;

}

void IsMallocOk(Link new_node)

{
if (new_node == NULL)
{
printf ("No enough memory to allocate!\n");
exit(-1);
}

}

void CreatNewnode(Link *new_node)

{
*new_node = (Link)malloc(sizeof(Node));
IsMallocOk(*new_node);

}

void InsertNodeTail(Link *head, Link new_node)

{
Link temp;
temp = *head;

if (*head == NULL)
{
new_node -> next = *head;
 //若原链表为空表,那么新建节点置为头节点
*head = new_node;
}
else
{
while (temp -> next != NULL)
{
temp = temp -
4000
> next;
 //若原链表为非空,那么移动temp直到指向表尾
}
temp -> next = new_node;
new_node -> next = NULL;
 //让末节点的指针域指向新建节点
}

}

void DisplayNode(Link head)  //打印链表节点

{
Link temp;
temp = head;
while (temp != NULL)
{
printf ("%d  ", temp -> num);
temp = temp -> next;
}
printf ("\n");

}

int main()

{
int Arr[] = {1,3,2,16,5,4,65,36,7,10};
 //初始化一个数组
Link head = NULL;
 
Link new_node = NULL;
int i = 0;

CreatLink(&head);
 //创建一个头节点

for (i = 0; i < 10; i++)
{
CreatNewnode(&new_node);
 //创建新的节点
new_node -> num = Arr[i];
 //将数组的数据写入节点
InsertNodeTail(&head, new_node);
}

DisplayNode(head);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: