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

xiaoxiao2021-02-27  288

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; }
转载请注明原文地址: https://www.6miu.com/read-2669.html

最新回复(0)