错在那里(关于用双向循环链表存储不限定数位的长整数)

sun_srh 2002-09-26 10:38:55
#include<stdio.h>
#define NULL 0
struct node{
int data;
struct node *llink,*rlink;
};
typedef struct node NODE;
NODE *creat_link
{ /*提示是这里声明错误*/
NODE *head;
head=(NODE *)malloc(sizeof(NODE));
head->data=0;
head->llink=head;
head->rlink=head;
return(head);
}
NODE *insert_link(NODE *q,int num)
{
NODE *p;
head->data++;
p=(NODE *)malloc(sizeof(NODE));
p->data=num;
q->rlink=p;
p->rlink=head;
p->llink=q;
q=p;
return(q);
}
main()
{
NODE *q;
int num;
q=creat_link;
printf("Please enter the first number:\n");
do{
scanf("%d",&num);
q=insert_link(q,num);
}while(getchar()!='\n');
q=head->rlink;
do{
printf("%d,",q->data);
q=q->rlink;
}while(q->rlink!=head);
}
...全文
118 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sun_srh 2002-09-27
  • 打赏
  • 举报
回复
上面的错误我改正过了,但现在输入和输出不同,为什么。
#include<stdio.h>
#define NULL 0
struct node{
int data;
struct node *llink,*rlink;
};
typedef struct node NODE;
NODE *creat_link(NODE *head)
{
head->data=0;
head->llink=head;
head->rlink=head;
return(head);
}
NODE *insert_link(NODE *q,int num)
{
NODE *p;
p=(NODE *)malloc(sizeof(NODE));
p->data=num;
q->rlink=p;
p->llink=q;
q=p;
return(q);
}
main()
{
NODE *q,*head;
int num;
head=(NODE *)malloc(sizeof(NODE));
q=creat_link(head);
printf("\nPlease enter the first number:\n");
while(getchar()!='\n'){
num=getchar();/*我想可能是这里出了问题*/
q=insert_link(q,num);
head->data++;
}
q->rlink=head;
q=head->rlink;
do{
printf("%d",q->data);
q=q->rlink;
}while(q->rlink!=head);
}
sun_srh 2002-09-27
  • 打赏
  • 举报
回复
我有发现新问题。
当输入为1,0000,1234两逗号之间是4个0的时候,计算机认为0000==0。所以我每个节点只放一个数字。
run的时候居然不能退出了,帮我看一下。
#include<stdio.h>
#define NULL 0
struct node{
int data;
struct node *llink,*rlink;
};
typedef struct node NODE;
NODE *creat_link(NODE *head)
{
head->data=0;
head->llink=head;
head->rlink=head;
return(head);
}
NODE *insert_link(NODE *q,int num)
{
NODE *p;
p=(NODE *)malloc(sizeof(NODE));
p->data=num;
q->rlink=p;
p->llink=q;
q=p;
return(q);
}
main()
{
NODE *q,*head;
int num;
head=(NODE *)malloc(sizeof(NODE));
q=creat_link(head);
printf("Please enter the first number:\n");
while(getchar()!='/n'){
num=getchar();
q=insert_link(q,num);
head->data++;
}
q->rlink=head;
q=head->rlink;
do{
printf("%d,",q->data);
q=q->rlink;
}while(q->rlink!=head);
}
sunzm 2002-09-27
  • 打赏
  • 举报
回复
getchar();/*这里用来吸收一个逗号,对吗*/
}while(getchar()!='\n');
建议:去掉getchar(),
while(num!=XXXXX)作为退出条件
链表的最后一个元素并没有指向第一个元素。
在while(getchar()!='\n');
后加入
q->rlink=head;
sun_srh 2002-09-27
  • 打赏
  • 举报
回复
改过以后的新问题
#include<stdio.h>
#define NULL 0
struct node{
int data;
struct node *llink,*rlink;
};
typedef struct node NODE;
NODE *creat_link(NODE *head)
{
head->data=0;
head->llink=head;
head->rlink=head;
return(head);
}
NODE *insert_link(NODE *q,int num)
{
NODE *p;
p=(NODE *)malloc(sizeof(NODE));
p->data=num;
q->rlink=p;
p->llink=q;
q=p;
return(q);
}
main()
{
NODE *q,*head;
int num;
head=(NODE *)malloc(sizeof(NODE));
q=creat_link(head);
printf("Please enter the first number:\n");
do{
scanf("%d",&num);
q=insert_link(q,num);
head->data++;
getchar();/*这里用来吸收一个逗号,对吗*/
}while(getchar()!='\n');
q=head->rlink;
do{
printf("%d,",q->data);
q=q->rlink;/*run的时候,出现死循环,这里有什么错*/
}while(q->rlink!=head);
}
sun_srh 2002-09-27
  • 打赏
  • 举报
回复
对不起,我忘了说明了。
利用双向循环链表实现长整数的存储,每个节点含一个整形变量。任何整形变量的范围是-(2^15-1)~(2^15-1)。输入和输出形式:按中国对于长整数的表示习题,每四位一组,组间用逗号隔开。
例:2345,6789,1234
1,0001,0001
我的头指针(head)的数据域放的是节点的个数 。
题目要求不能给出长整数位数规定上限。
hello_wyq 2002-09-26
  • 打赏
  • 举报
回复
好粗心!

积木 2002-09-26
  • 打赏
  • 举报
回复
NODE *creat_link <-这个地方加一个括号就好了
{ /*提示是这里声明错误*/
NODE *head;
head=(NODE *)malloc(sizeof(NODE));
head->data=0;
head->llink=head;
head->rlink=head;
return(head);
}
还有,这个函数中的head没有定义
NODE *insert_link(NODE *q,int num)
{
NODE *p;
head->data++;//这个变量在那里定义的???
p=(NODE *)malloc(sizeof(NODE));
p->data=num;
q->rlink=p;
p->rlink=head;
p->llink=q;
q=p;
return(q);
}

Last_Dodo 2002-09-26
  • 打赏
  • 举报
回复
应该是NODE *creat_link()而不是NODE *create_link因为你在定义函数。否则是定义变量。

另外,你好象有个全局变量(head),同时create_link()又用同名的局部变量。当然,它没问题,但应尽量避免。

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧