#include <stdio.h>
#include <malloc.h>
//定义结点结构体
struct node{
char data;
struct node *next;
};
typedef struct node JD;
//指针函数,返回创建的链表
JD *createLinkedList(){
JD *head,*s,*r;//定义头节点,待插入结点,尾节点指针
char ch;//输入的字符
//初始化链表
//头指针 不含data数据,next指向第一个结点
head=(JD *)malloc(sizeof(JD));//给结点分配内存空间
r=head;
printf("请输入字符:\n");
//ch=getchar();
//$为终结符
while((ch=getchar())!='$'){
s=(JD *)malloc(sizeof(JD));
s->data=ch;
r->next=s;
r=s;
//printf("s->data=:%c\n",ch);
/*getchar会缓冲键盘输入的所有字符包括\n(换行符),while第一次执行时取走缓冲区第一个字符并删除缓冲区相应
字符,当下一次调用getchar时候还是会去缓冲区取字符,这儿如果不清空缓存,while下一次循环其实是调用的ch='\n'
所以我们每次重新输入前都要清空缓存 */
fflush(stdin);
}
r->next=NULL;
return head;
}
int countLength(JD *list){
int i=0;
JD *node;//定义一个结点指针指向头节点所指向的第一个节点,因为头节点不含data
node=list->next;
while(node!=NULL){
i++;
//printf("++%c++\n",node->data);
node=node->next;
}
return i;
}
int main(){
JD *list=createLinkedList();
JD *node;//定义一个结点指针指向头节点所指向的第一个节点,因为头节点不含data
node=list->next;
int length=countLength(list);
printf("链表长度为:%d\n",length);
while(node!=NULL){
printf("%c ",node->data);
node=node->next;
}
}
尾插法建链表
最新推荐文章于 2024-09-13 00:02:47 发布