c/c++单链表操作

sinat_34267755 2016-10-14 12:14:13
编译通过,但输入La时就会“已停止工作“,不懂其中原因,请各位指点。

void Input(LinkList &L)
{
int i,num,e;
printf("num = ");
scanf("%d",&num);
for(i=1;i<=num;i++)
{
LNode *p;
p=L;
LNode *s;
s=new LNode;
scanf("%d",s->data);
ListInsert_L(L,p,s);
//p=p->next;
}
}

typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;

//1创建
void InitList_L(LinkList L)
{
L=new LNode;//头结点
L->next=NULL;
}

void ListInsert_L(LinkList &L,LNode *p,LNode *s)
{
//将s结点插入在p结点之后
s->next=p->next;
p->next=s;
}

int main()
{
LinkList La,Lb,Lc,Ld,Le,Lf;

printf("**********La**********\n");
InitList_L(La);
Input(La);

printf("**********Lb**********\n");
InitList_L(Lb);
Input(Lb);

return 0;
}
}
...全文
175 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-14
  • 打赏
  • 举报
回复
printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
paschen 2016-10-14
  • 打赏
  • 举报
回复
scanf("%d",s->data); 改成 scanf("%d",&s->data);
小灸舞 2016-10-14
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。
litchgu 2016-10-14
  • 打赏
  • 举报
回复
我挺好奇你是用什么软件编译的?
litchgu 2016-10-14
  • 打赏
  • 举报
回复
#include <stdio.h> #include<iostream> using namespace std; typedef struct LNode { int data; struct LNode *next; }LNode, *LinkList; void Input(LinkList &L); void ListInsert_L(LinkList &L,LNode *p,LNode *s); void InitList_L(LinkList L); int main() { LinkList La,Lb,Lc,Ld,Le,Lf; La=(struct LNode *)malloc(sizeof(struct LNode)); Lb=(struct LNode *)malloc(sizeof(struct LNode)); printf("**********La**********\n"); InitList_L(La); Input(La); printf("**********Lb**********\n"); InitList_L(Lb); Input(Lb); free(La); free(Lb); return 0; } void Input(LinkList &L) { int i,num,e; printf("num = "); scanf("%d",&num); for(i=1;i<=num;i++) { LNode *p; p=L; LNode *s; s=new LNode; scanf("%d",&s->data); ListInsert_L(L,p,s); //p=p->next; } } void ListInsert_L(LinkList &L,LNode *p,LNode *s) { //将s结点插入在p结点之后 s->next=p->next; p->next=s; } //1创建 void InitList_L(LinkList L) { L=new LNode;//头结点 L->next=NULL; } 好多错!我不知道你是怎么编译过的。 1.main函数多了一个“}”。 2.结构体指针未初始化。 3.ElemType没定义,不知道是不是你定义了没贴上来,我改成了int。 4.scanf("%d",s->data)中scanf后面的是地址不是变量。 5.return 0面的;你用了中文格式。
dustpg 2016-10-14
  • 打赏
  • 举报
回复
楼上的, 夜深人静不正好写代码么
eastfriendwu 2016-10-14
  • 打赏
  • 举报
回复
scanf("%d",s->data);这句有问题。
像这种问题,你加打印或者单步一下,就发现问题了吧。还有太晚了写代码效率不高。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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