所以,伙计们,我试图在 C 中实现一个链表算法,这是代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct lista{
int info;
struct lista *next;
} *aplinked, strulinked;
aplinked insereNoFim(aplinked inicio, aplinked novo)
{
aplinked temp;
if (inicio == NULL)
inicio = novo;
else{
temp = inicio;
while (temp->next != NULL)
temp=temp->next;
temp->next = novo;
}
return inicio;
}
aplinked lenovo()
{
aplinked x;
x = (aplinked) malloc (sizeof(strulinked));
scanf ("%d", &x->info);
return x;
}
void exibe(aplinked inicio){
aplinked temp = inicio;
if (temp == NULL)
printf ("Não existe dados");
else
while (temp!=NULL){
printf ("\n info: %d \n", temp->info);
temp = temp->next;
}
}
aplinked remover(aplinked inicio, int x)
{
aplinked ant = NULL;
aplinked temp = inicio;
//procura o elemento na lista, guardando o anterior.
while (temp!=NULL && temp->info != x){
ant = temp;
temp = temp->next;
}
//verifica se achou
if (temp == NULL)
return inicio; //no caso de não achar
if (ant == NULL)
inicio = temp->next; //retirar o 1o elemento
else
ant->next = temp->next;
free (temp);
return inicio;
}
int pesquisa (aplinked inicio, int x){
aplinked temp = inicio;
while (temp!=NULL){
if (temp->info == x)
return 1;
temp = temp->next;
}
return 0;
}
int main ()
{
int cont = 1;
aplinked inicio = NULL;
while (cont){
inicio = insereNoFim(inicio, lenovo());
scanf ("%d", &cont);
}
exibe(inicio);
printf ("Digite numero a ser pesquisado: \n");
scanf ("%d", &cont);
if (pesquisa (inicio, cont))
printf ("achou o elemento buscado \n");
else
printf ("não achou");
printf ("Digite elemento a ser removido: \n");
scanf ("%d", &cont);
inicio = remover (inicio, cont);
exibe (inicio);
}
是的,代码不是英文的,但你可能知道它是关于什么的,所以,一个链表,删除/插入/搜索/打印功能,在 linux 上运行良好,但在 windows 上运行不正常! !
有任何想法吗?