【发布时间】:2019-05-16 23:03:05
【问题描述】:
首先,我需要创建并显示一个以数字 1000 结尾的列表。效果很好。
然后,我想创建另一个列表,其中仅包含第一个列表中可被 3 整除的数字,但它不起作用。
最糟糕的是,它甚至没有告诉我发生了什么。它只是在执行时出错,但控制台什么也没说。
我将非常感谢任何帮助。
我都试过了。
#include <stdio.h>
#include <stdlib.h>
#include<time.h>
#define CANTIDAD_NUMEROS 13
#define CANTIDAD_NUMEROS2 6
#define DESDE 1
#define HASTA 10
typedef struct lista{
int num;
struct lista *sig;
}nodo;
void crear (nodo *pt, int, int);
void crear2 (nodo *pt, int, nodo *pt2);
void mostrar(nodo *pt);
int main()
{
int i=0;
int t=0;
nodo *prin;
nodo *prin2;
prin=(nodo*)malloc(sizeof(nodo));
prin2=(nodo*)malloc(sizeof(nodo));
crear(prin,i, t); //creates first list
mostrar (prin); //shows first list
crear2(prin,i, prin2); //gets 'divisible by 3' numbers
mostrar(prin2); // shows second list
return 0;
}
//creates list
void crear (nodo *registro, int cont, int t)
{
scanf("%d", &t);
registro->num = t;
if (registro->num == 1000)
registro->sig=NULL;
else
{
registro->sig=(nodo*)malloc(sizeof(nodo));
cont++;
crear (registro->sig,cont, t);
}
return;
}
//shows list
void mostrar (nodo *registro)
{
if (registro->sig !=NULL)
{
printf ("%d\n",registro->num);
mostrar (registro->sig);
}else{
printf("%d\n",registro->num);
}
return;
}
//creates second list with only numbers that are divisible by 3
void crear2 (nodo *registro, int cont, nodo *registroNuevo)
{
if ((registro->num % 3) == 0){
registroNuevo->num = registro->num;
registroNuevo->sig = (nodo*)malloc(sizeof(nodo));
}
if(registro->sig != NULL){
crear2(registro->sig,cont, registroNuevo->sig);
}else{
return;
}
}
我希望显示第一个列表(它正在发生)以及显示可被 3 整除的数字的第二个列表,这不会发生。
【问题讨论】:
-
澄清一下——这需要是链表结构,而不是数组?
-
是的。它需要是一个链表。我这样做的方式(但工作)......
-
在第一个列表中,当用户插入 1000 时,我停止创建节点。
-
在第二个中,它应该是用可以被 3 整除的数字创建的
-
你的创建函数是无故递归的;制作这些简单的循环将简化事情并防止堆栈问题。此外,在 crear2() 中,如果第一个数字不是 3 的倍数,那么您的递归调用包括 registroNuevo->sig,它从未设置过,因此将调用未定义的行为。事实上,这里真的没有理由在任何地方进行递归。
标签: c recursion linked-list