C语言的单链表问题,关于输入问题如何停止的问题!
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a;
node *next;
}lnode,*linklist;
linklist create_linklist() //创建链表
{
linklist L;
lnode *s;
char ch;
L=(linklist)malloc(sizeof(lnode));
L->next=NULL;
s=L;
printf("input some mumber,please!\n");
scanf("%d",&i);
while(i!=flag) /*这个地方如何处理呢,我看书上说设置个flag,但是这种情况下整型的如何判断是不是输入的结束来判断呢?如何处理呢?实在没弄懂,书上说的也很模糊!请知道的告诉一下吧!*/
{
s->next->a=i;
ch=i;
s=s->next;
scanf("%d",&i);
}
s->next=NULL;
return L;
}
void display(lnode *L) //显示链表
{
printf("The mumber are:");
while(L->next!=NULL)
{
printf("%d",L->a);
L=L->next;
}
printf("/n");
}
int main()
{
lnode *s;
s=create_linklist();
display(s);
return 0;
} 展开
首先 你的结构体定义就有问题,应该将里面的
typedef struct node
{
int data;
struct node *next; //这里应该加上个struct ,node 是标签,但要和struct 连用才可以
}lnode,*linklist;
如果你只是为了创建链表然后输出链表内容这样就可以了 在你源码基础上修改的
linklist create_linklist() //创建链表
{
linklist head , p , q ;
int ch;
head=(linklist)malloc(sizeof(lnode));//创建头结点,具体的现实意义自己去翻下书吧。
if( head == NULL )
{
exit(0);
}
head->next=NULL;
q = head;//q指向head
while( scanf("%d" , &ch) == 1 && ch != 0 )//输入0结束
{
p = (linklist)malloc(sizeof(lnode));
if( p == NULL )//申请失败是会返回NULL指针 , 这里要检查一下
{
exit(0)
}
p->data = ch;
p->next = q->next; //==NULL
q->next = p;//q->next指向p
q = p;
}
return head;
}
display是对的 , 但是看你结构体用的不是很熟练,typedef估计也没弄清楚意思,还有指针也没怎么明白,你的creatlist中的好多变量之前都没有声明就开始用了。断定你是c新手,我比你老不到哪去。不管你基础如何 建议你看看《c和指针》这本书关于指针和结构体的内容 , 讲解的很清除,花时间去啃多看 看个十几遍就会了 然后要敲代码 。希望对你有帮助
2015-08-15 · 知道合伙人互联网行家
输入停止代码:
void freelist(book_info * book_info_head ,user_info * user_info_head)
{
if(user_info_head->next==NULL) free(user_info_head);
else
{
user_info * p1,* p2;/*释放用户信息链表*/
p1=user_info_head->next;
p2=user_info_head;
while(p1!=NULL)
{
free(p2);
p2=p1;
p1=p1->next;
}
}
if(book_info_head->next==NULL) free(book_info_head);
else
{
book_info * p3,* p4;/*释放图书信息链表*/
p3=book_info_head->next;
p4=book_info_head;
while(p3!=NULL)
{
free(p4);
p4=p3;
p3=p3->next;
}
}
}
如果想在输入某个特殊数据结束创建的话,可以定义一个flag为这个值。
如果输入的整数可能是任意值,则判断结束就不能这样了,只能通过scanf("%d",&i)的返回值来判断了,如果输入的是有效整数,则scanf()会返回1,否则会返回0,如:输入一个字母就会结束输入!