- #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;
- }
将字符存储到带有头结点的单向链表中
最新推荐文章于 2022-09-25 06:55:38 发布