任务描述![d3773e804002423fa049ef97d47d09a1.jpeg](https://img-blog.csdnimg.cn/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;
}
之所以说是引导性注释版,是因为大部分意图都已给出但没有详细介绍,没搞懂的可以私聊问我,最好能通过自主性思考了解原理,这样收获更多。