2013-04-11 41 views
-2

所以,大家好,我是想實現在C鏈表算法,下面的代碼:語言C,算法在LINUX上運行良好,而不是在Windows 7上運行?

#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上運行良好!

有什麼想法?

+4

有什麼問題。在Windows?你可以請細節? – m0skit0 2013-04-11 18:14:56

+0

您是否嘗試調試它?你看見什麼了?你有什麼錯誤症狀? – ugoren 2013-04-11 18:15:07

+4

定義:在Windows中'不能正常運行'的意思是什麼。 – 2013-04-11 18:15:21

回答

1

當您分配一個新節點時,您不會初始化其next指針。這意味着它將指向一個看似隨機的位置,並且當您嘗試查找列表的結尾時,它將繼續循環到實際的結尾。

+0

非常感謝你,老兄! :] – Digorithm 2013-04-11 19:05:17

2

我高度推薦你學習如何使用調試器。這是你的問題:

因爲你從來沒有明確設置temp->nextNULL它可以在任何事情。顯然在Linux上它是NULL(你很幸運),在Windows上它只是垃圾..所以它試圖設置和取消引用它,然後你崩潰。

你應該在被填充結構的所有元素在你lenovo()功能,而不僅僅是info

相關問題