我有更高级语言的经验,但我是C的新手。我已经获得了单链表的实现。每当我尝试遍历列表时,我就会走出记忆(至少我认为这就是正在发生的事情)。以下是列表的实现:
/*Vertex data type.*/
typedef struct vnode {
struct vnode *NEXT;
int DATA;
} VertexBody;
typedef VertexBody *TypeVertex;
/*List data type (no header, just a pointer to first item).*/
typedef TypeVertex TypeList;
这是我的打印功能:
void print_list(TypeList *L) {
TypeVertex v=*L;
while(NEXT(v)!=NULL) {
printf("%d\n", DATA(v));
v=NEXT(v);
}
printf("%d\n", DATA(v));
}
运行print_list会给出以下输出(比如列表包含3个顶点,数据分别设置为1,2,3):
1
2
3
-94064
然后程序崩溃了。有什么问题?
编辑:在第一段中将“遍历”更改为“迭代”。
答案 0 :(得分:2)
在迭代链表时,您需要确保当前项不是NULL
。一旦你验证了它,你想打印出来,然后得到下一个。
因此,这段代码:
void print_list(TypeList *L) {
TypeVertex v=*L;
while(NEXT(v)!=NULL) {
printf("%d\n", DATA(v));
v=NEXT(v);
}
printf("%d\n", DATA(v));
}
应该是:
void print_list(TypeList *L) {
TypeVertex v=*L;
while(v!=NULL) {
printf("%d\n", DATA(v));
v=NEXT(v);
}
printf("%d\n", DATA(v));
}
答案 1 :(得分:0)
我似乎误认了这个问题。该程序崩溃了,因为我忘了为列表分配内存。我觉得自己像个白痴,但至少我可以继续前进。谢谢你的回答。