单链表以及无冗余存储字符(引导性注释版本)

任务描述d3773e804002423fa049ef97d47d09a1.jpeg
本关任务:输入一行字符,建立一个先进先出单链表,链表的每个结点含有输入的一个字符。再完成下列任务:
(1)遍历输出该链表中所有字符;
(2)将该链表中所有字符无冗余地存放到一个通过动态存储分配创建的字符数组中,并且输出该字符数组的长度以及该字符数组的内容。

 

 #include <stdio.h>

 #include <string.h>

 #include <stdlib.h> //malloc free sizeof必备函数

 struct input{ 

     char get; //获取一个字符

     struct input *next; //声明结构

 };

 

 int main(void)

 {

     struct input *head; //头指针

     struct input *prev,*current; //保存用指针以及指向当前链的指针

     char ch; //获取字符

     int num=0; //计算字符数

     while((ch=getchar())!='\n')

     {

             num++;

         current =(struct input *)malloc(sizeof(struct input)); //为某一项创建空间

         if(head==NULL) //如果是最后一项就将next设置为null,如果不是,就设置新的next

             head=current;                    

         else prev->next=current;

         current->get=ch;

         prev=current;

     }

     if(head==NULL)

         ; //如果没有输入字符,就不执行任何操作

     current=head;

     

     while(current!=NULL)

     {

         printf("%c",current->get); //依次输出同时指向下一环

         current=current->next;

     }

     printf("\n%d\n",num); //代码简洁之道       

     current=head; //从头开始

     

     char *ycz;

     ycz=(char *)malloc(num*sizeof(char)); //分配相应大小的空间

     for(int i=0;i<num;i++)

     {

         ycz[i]=current->get; //数组的指针表示法

         current=current->next; //依次实现赋值,指向下一环,输出,只用了一个循环

         printf("%c",ycz[i]);

     }

 

     current=head; //开始释放空间

     while(current!=NULL)

     {

         head=current->next; //很巧妙

         free(current);

         current=head;

     }

 

     return 0;

 }

之所以说是引导性注释版,是因为大部分意图都已给出但没有详细介绍,没搞懂的可以私聊问我,最好能通过自主性思考了解原理,这样收获更多。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yo_vincent

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值