-1
所以,當我試圖刪除列表的第一個元素時,我得到了這個問題。奇怪的是我可以使用這個函數,直到列表中的三個元素,然後我的終端停下來回答。任何想法?刪除列表中的第一個元素
typedef struct event_t
{
double time;
char description[50];
int id_origin, id_dest;
struct event_t *prox;
} event_t;
void
event_remove_first (event_t ** list)
{
event_t *aux = *list;
if (*list == NULL)
printf ("Empty list\n");
else
*list = aux->prox;
free (aux);
}
bool event_add_end (event_t **list, double time, char description[], int id_origin, int id_dest) {
event_t *newelement = (event_t*)malloc(sizeof(event_t));
event_t *aux = *list, *prev = NULL;
if (newelement!=NULL) {
newelement->time = time;
strcpy (newelement->description, description);
newelement->id_origin = id_origin;
newelement->id_dest = id_dest;
newelement->prox = NULL;
if (*list==NULL)
*list = newelement;
else {
while (aux!=NULL) {
prev = aux;
aux = aux->prox;
}
prev->prox = newelement;
}
return true;
}
else {
return false;
}
}
bool event_add_ordely (event_t **list, double time, char description[], int id_origin, int id_dest) {
event_t *newelement = (event_t*)malloc(sizeof(event_t));
event_t *aux = *list, *prev = NULL;
if (newelement!=NULL) {
newelement->time = time;
strcpy (newelement->description, description);
newelement->id_origin = id_origin;
newelement->id_dest = id_dest;
if (*list==NULL) {
*list = newelement;
newelement->prox = NULL;
} else if (aux->prox == NULL) {
if (aux->time <= time) {
aux->prox = newelement;
newelement->prox = NULL;
} else {
*list = newelement;
newelement->prox = aux;
}
} else {
while (aux->time<=time) {
prev = aux;
aux = aux->prox;
}
newelement->prox = aux;
prev->prox = newelement;
}
return true;
}
else {
return false;
}
}
event_t *event_ordely (event_t *list) {
event_t *newlist = NULL;
while (list!=NULL) {
event_add_ordely (&newlist, list->time, list->description, list->id_origin, list->id_dest);
list = list->prox;
}
return newlist;
}
int main (int argc, char *argv[]) {
event_t *list = NULL, aux;
int number, i;
printf ("Digite o números de eventos: "); // Here I scan the infos of each element - its in portuguese.
scanf ("%d", &number);
printf ("\n");
for (i=0; i<number; i++) {
printf ("Evento %d\n", i+1);
printf ("Digite o tempo de duração: ");
scanf ("%lf", &aux.time);
printf ("Digite a descrição: ");
scanf ("%s", aux.description);
printf ("Digite a id de origem: ");
scanf ("%d", &aux.id_origin);
printf ("Digite a id de destino: ");
scanf ("%d", &aux.id_dest);
printf ("\n");
event_add_end (&list, aux.time, aux.description, aux.id_origin, aux.id_dest);
}
event_t *newlist = event_ordely (list);
event_remove_first (&newlist);
return 0;
}
顯示更多的代碼。 –
此代碼似乎正確。你確定你的代碼的其餘部分是可以的嗎? –
給出調用代碼或主要功能。這段代碼很好。和代碼不適用於超過3個節點你的意思? – LearningC