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

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);
}
...全文
175 8 打赏 收藏 举报
写回复
用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()又用同名的局部变量。当然,它没问题,但应尽量避免。
源码链接: https://pan.quark.cn/s/a4b39357ea24 微信小程序是由腾讯公司设计的一种轻量级应用开发平台,主要面向移动设备,旨在为用户带来无需下载安装即可直接使用的应用服务体验。在微信小程序的开发实践中,"模仿美团菜单 swiper分类菜单"是一项常见的技术应用,其目的是达成与美团外卖应用相似的交互模式,使用户能够轻松地浏览和挑选各种商品或服务。 在微信小程序的技术体系中,`swiper`组件属于轮播图功能模块,通常用于呈现多张图片或卡片式的切换界面,能够达成动态滑动展示不同分类菜单的功能。在模拟美团菜单的应用情境下,`swiper`组件一般与`swiper-item`组件协同工作,每一个`swiper-item`对应一个分类,用户可通过左右滑动来切换不同的分类菜单。 为了达成这样的功能,首先需要在微信小程序的`json`配置文档中引入`swiper`组件,并在`wxml`结构文档中构建相应的布局代码,将每个分类以`swiper-item`的形式进行组织。同时,需要在`wxss`样式文档中定义恰当的样式,保证分类菜单的视觉呈现符合设计规范。 接下来,我们将在`js`逻辑文档中处理`swiper`的切换逻辑,通过监听`bindchange`事件来识别当前选中的分类,并根据这一信息动态获取对应的子菜单信息。为了达成类似美团的层级菜单功能,可能还需要借助`picker`或`navigator`组件来展示二级分类或商品详情。 在开发阶段,需要关注以下关键点: 1. 数据绑定:保证数据与界面之间的双向链接准确无误,以便在选择分类时即时更新显示内容。 2. 动态加载:针对大量数据,可能需要采取异步加载机制,防止一次性加载过多内容引发性能瓶颈...
代码下载地址: https://pan.quark.cn/s/72bd50ecb2fb 《微信飞机大战素材详解》 微信飞机大战作为一款广受欢迎的休闲游戏,凭借其便捷的操作方式和紧张刺激的游戏过程,赢得了众多用户的青睐。本文将系统性地剖析这款游戏的关键素材,旨在帮助开发者全面掌握游戏的设计理念与实现方法。 我们聚焦于游戏的核心构成——"AirplaneResource"。此名称一般指向游戏资源库,其中收纳了游戏中所有的视觉素材、音频资料以及动画元素。在微信飞机大战的语境下,这些资源构成了游戏画面呈现、音效播放和动态效果的基础。 1. **图像素材**:游戏中的飞机造型、敌方单位、弹药以及爆炸效果等视觉元素,均以图像素材的形式进行展示。图像素材通常涵盖PNG或JPG格式的静态图片,也包括GIF或APNG格式的动态图片。开发者需要细致地设计并优化这些图像,确保在各种设备上都能实现流畅的渲染,同时维持视觉表现力。 2. **声音素材**:游戏的背景音乐、射击音效、爆炸声等音频片段,对于构建游戏氛围具有决定性作用。这些音频文件可能以MP3、WAV或OGG格式进行存储,开发者需要权衡音频的压缩程度与音质,以确保在不牺牲游戏体验的前提下,有效控制文件体积。 3. **动画序列**:飞机的飞行轨迹、攻击动作、爆炸过程等动态表现,通常借助序列帧动画技术实现。这些序列帧图片组合而成的动画,通过编程控制播放速率和顺序,为游戏增添生动的动态效果。 4. **物理接触判定**:游戏中飞机与弹药之间的接触判定,是通过算法完成的。开发者可能会采用基础的矩形接触判定或更精密的像素级接触判定,以保证游戏的公平性和挑战性。 5. **游戏规则**:微信飞机大战的得分机制、生命值系统、敌机生成逻辑等...

70,040

社区成员

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

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