1109

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


#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值