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

来源:互联网 发布:linux发行版 编辑:程序博客网 时间:2024/05/16 01:57

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 -> 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;
}
0 0
原创粉丝点击