Enviado em 03/10/2008 - 18:14h
Galera, implementei um códio de teste para uma lista encadeada estática, mas está dando segmentation fault.
Aguém consegue descobrir o erro do meu código?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 100
struct No{
char info[30] ;
int prox ;
}typedef No ;
struct Lista{
No Dados[TAM] ;
int Dispo ;
int Prim ;
}typedef Lista ;
void inicializaLista(Lista &L) {
int i=0 ;
for (i=0; i<TAM; i++) {
L.Dados[i].prox = i+1 ;
}
L.Prim = -1 ;
L.Dispo = 0 ;
L.Dados[TAM-1].prox = -1 ;
}
bool insereNo(Lista &L, char* palavra) {
int i = L.Prim;
int ant = -1 ;
int aux ;
if (L.Prim == -1){
L.Dispo = L.Prim ;
L.Dados[L.Prim].prox = (L.Dispo)+1 ;
strcpy(L.Dados[L.Dispo].info, palavra);
L.Dispo = L.Dados[L.Prim].prox ;
}
while ((L.Dados[i].prox!= -1)&&(strcmp(L.Dados[i].info, palavra) < 0)){
ant = i ;
i = L.Dados[i].prox ;
}
aux = L.Dados[L.Dispo].prox;
L.Dados[ant].prox = L.Dispo ;
strcpy(L.Dados[L.Dispo].info, palavra);
L.Dados[L.Dispo].prox = i ;
L.Dispo = aux ;
return true ;
if (L.Dados[i].prox == -1) return false ;
}
bool removeNo(Lista &L, char* pal) {
int i = L.Prim ;
int ant = -1;
if (L.Prim == -1) return false ;
while ((L.Dados[i].prox != -1)&&(strcmp(L.Dados[i].info, pal) != 0)) {
ant = i;
i = L.Dados[i].prox ;
}
if (L.Dados[i].prox != -1 ) {
L.Dados[ant].prox = L.Dados[i].prox ;
L.Dados[i].prox = L.Dispo ;
L.Dispo = i ;
return true ;
}
return false ;
}
bool imprimeLista (Lista &l) {
int i=l.Prim ;
int j = l.Dados[i].prox ;
if(i != -1) {
printf(l.Dados[i].info) ;
while(j!=-1 ){
printf(l.Dados[j].info) ;
}
}
return false;
}
int main() {
char*palavra;
palavra = (char*)malloc(30*sizeof(char));
Lista teste ;
inicializaLista(teste);
printf("\nDigite uma palavra para ser inserida na lista:\t") ;
gets(palavra) ;
insereNo(teste, palavra) ;
printf("\nDigite a palavra que deseja remover:\t") ;
gets(palavra) ;
removeNo(teste, palavra) ;
free(palavra) ;
return 0 ;
}
vlw!
Aguém consegue descobrir o erro do meu código?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TAM 100
struct No{
char info[30] ;
int prox ;
}typedef No ;
struct Lista{
No Dados[TAM] ;
int Dispo ;
int Prim ;
}typedef Lista ;
void inicializaLista(Lista &L) {
int i=0 ;
for (i=0; i<TAM; i++) {
L.Dados[i].prox = i+1 ;
}
L.Prim = -1 ;
L.Dispo = 0 ;
L.Dados[TAM-1].prox = -1 ;
}
bool insereNo(Lista &L, char* palavra) {
int i = L.Prim;
int ant = -1 ;
int aux ;
if (L.Prim == -1){
L.Dispo = L.Prim ;
L.Dados[L.Prim].prox = (L.Dispo)+1 ;
strcpy(L.Dados[L.Dispo].info, palavra);
L.Dispo = L.Dados[L.Prim].prox ;
}
while ((L.Dados[i].prox!= -1)&&(strcmp(L.Dados[i].info, palavra) < 0)){
ant = i ;
i = L.Dados[i].prox ;
}
aux = L.Dados[L.Dispo].prox;
L.Dados[ant].prox = L.Dispo ;
strcpy(L.Dados[L.Dispo].info, palavra);
L.Dados[L.Dispo].prox = i ;
L.Dispo = aux ;
return true ;
if (L.Dados[i].prox == -1) return false ;
}
bool removeNo(Lista &L, char* pal) {
int i = L.Prim ;
int ant = -1;
if (L.Prim == -1) return false ;
while ((L.Dados[i].prox != -1)&&(strcmp(L.Dados[i].info, pal) != 0)) {
ant = i;
i = L.Dados[i].prox ;
}
if (L.Dados[i].prox != -1 ) {
L.Dados[ant].prox = L.Dados[i].prox ;
L.Dados[i].prox = L.Dispo ;
L.Dispo = i ;
return true ;
}
return false ;
}
bool imprimeLista (Lista &l) {
int i=l.Prim ;
int j = l.Dados[i].prox ;
if(i != -1) {
printf(l.Dados[i].info) ;
while(j!=-1 ){
printf(l.Dados[j].info) ;
}
}
return false;
}
int main() {
char*palavra;
palavra = (char*)malloc(30*sizeof(char));
Lista teste ;
inicializaLista(teste);
printf("\nDigite uma palavra para ser inserida na lista:\t") ;
gets(palavra) ;
insereNo(teste, palavra) ;
printf("\nDigite a palavra que deseja remover:\t") ;
gets(palavra) ;
removeNo(teste, palavra) ;
free(palavra) ;
return 0 ;
}
vlw!