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

来源:互联网 发布:可以看亚丝娜本子软件 编辑:程序博客网 时间:2024/04/30 17:52
#include<stdio.h>#include<stdlib.h>struct node//定义结点结构体{char ch;struct node *next;};typedef struct node Node;//重命名 结点结构体变量typedef struct node* Link;//重命名 指向结点结构体的指针变量int strlen_s(char *s)//求字符串长度{int i = 0;while (*s != '\n'){i++;s++;}return i;}void create_link(Link *head)//创建链表,{*head = NULL;//空链表}void is_malloc_ok(Link new_node)//判断新结点是否分配空间成功{if (NULL == new_node){printf("malloc error!\n");exit(-1);}}void create_new_node(Link *new_node)//创建新结点{*new_node = (Link)malloc(sizeof(Node));is_malloc_ok(*new_node);}void insert_tail(Link *head, Link new_node)//尾插新结点{Link tmp;tmp = *head;if (NULL == *head)//空链表,只能头插{new_node->next = *head;*head = new_node;}else{while (tmp->next != NULL)//找到尾结点{tmp = tmp->next;}tmp->next = new_node;new_node->next = NULL;}}void display_link(Link head)//显示结点内容{Link tmp;tmp = head;if (NULL == head)//空链表{printf("Link is empty!\n");return ;}while (tmp != NULL){printf("ch is '%c'\n",tmp->ch);tmp = tmp->next;}}void makeEmpty(Link *head)//清空链表,释放结点空间{Link tmp;tmp = *head;while(tmp != NULL){*head = tmp->next;free(tmp);tmp = tmp->next;}}int main(){Link head = NULL;Link new_node = NULL;int i;int len;char s[20];printf("Enter string(<=20)!\n");fgets(s,20,stdin);len = strlen_s(s);create_link(&head);//创建链表for (i = 0; i < len; i++){create_new_node(&new_node);//创建新结点new_node->ch = s[i];//为新结点成员赋值insert_tail(&head, new_node);//尾插新结点}display_link(head);//显示链表makeEmpty(&head);//清空链表,释放空间display_link(head);//显示链表    return 0;}

0 0
原创粉丝点击