Ir ao conteúdo
  • Cadastre-se

Fazer a modificação de vetor para lista


luizvega

Posts recomendados

Alguém pode me dá alguma dica de como passar esse programa de vetor para lista ?

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>

#define N 59
#define M 101

char *tabela[M];
char *simbolo[N] =
{
"+", "-", "*", "/", ":=", "=", "<", ">", "[",
"]", ".", ",", "(", ")", ":", ";", "^", "@", "#",
"<=", ">=", "..", "/*", "*/",
"and", "array", "begin", "case", "const", "div",
"do", "downto", "else", "end", "file", "for",
"func", "goto", "if", "in", "label", "mod", "nil",
"not", "of", "or", "packed", "proc", "progr","record",
"repeat", "set", "then", "to", "type", "until", "var",
"while", "with"
};

void inicializa(void);
void insere(void);
int h(char *x);
int membro(char *pala);
void tela(void);
void imprimehash(void);

int main(void)
{
char opc;
char palavra[80];
inicializa();
insere();
do
{
tela();
printf("De a palavra a ser pesquisada : ");
scanf("%s", palavra);
if(membro(palavra))
printf("A palavra %s e' reservada!\n", palavra);
else
printf("A palavra %s nao e' reservada!\n", palavra);
printf("(O)utra palavra. (F)im de execucao: ");
for(opc=tolower(getchar()); ((opc!='o' && opc!='f') || opc=='\n');
opc=tolower(getchar()))
;
}while(opc=='o');
printf("\n\n");
imprimehash();
printf("\nObrigado por usar o teste de hash.\n");

return 0;
}

int h(char *x)
{
int i, soma = 0;
for(i=0; i<6; i++)
{
if(x[i]=='\0')
break;
soma += (int) x[i];
}
return (soma % N); /* retorna valor entre 0 e 58, inclusive */
}


void inicializa (void)
{
int i;
for(i=0; i<M; i++)
tabela[i]=NULL;
}

void insere(void)
{
int i, j, resto;

for(i=0; i<N; i++)
{
resto = h(simbolo[i]);
if(tabela[resto]==NULL)
tabela[resto] = simbolo[i]; /* char *tabela[M]*/
else /* conflito! */
for(j=N; j<M; j++)
if(tabela[j]==NULL)
{
tabela[j] = simbolo[i];
break;
}
}
}

void imprimehash(void)
{
int i;

for(i=0; i<M; i++)
if(tabela[i]!=NULL)
{
printf("[%02d]: '%s'", i, tabela[i]);
if(i>=N)
printf("\t(conflito com [%d]: '%s')", h(tabela[i]), tabela[h(tabela[i])]);
printf("\n");
}
printf("\n");
}

int membro(char *pala)
{
int i, resto;
resto = h(pala);
if(tabela[resto]==NULL)
return 0;
if(!strcmp(pala,tabela[resto])) /* if( strcmp(pala,tabela[resto])==0 ) */
return 1;
else
for(i=N; i<M; i++)
if(tabela[i]!=NULL)
if(!strcmp(pala,tabela[i]))
return 1;
return 0;
}

void tela(void)
{
int i;
for(i=1; i<=N; i++)
{
printf("%s ",simbolo[i-1]);
if(!(i%10))
printf("\n");
}
printf("\n");
printf("____________________________________________________________\n");
}

Link para o comentário
Compartilhar em outros sites

Bom, não vou te dar a resposta de cara.

Qualquer coisa avise.

A lista em C é o seguinte ela é uma estrutura que contem a informação em si(no seu caso uma string) e um ponteiro apontando para o endereço de uma estrutura do mesmo tipo.

O ultimo nó da lista deve apontar para NULL.

No seu caso aloque uma estrutura com endereço para o próximo e a string(o endereço do primeiro byte do vetor de char).

Para manipular a lista é recomendável que você crie funções para manter organização em seu código.

2 sugestões para sua estrutura:

struct lista{
char *info; /*Onde você guardará a informação(a string)*/
char struct lista *Prox; /*ponteiro para o proximo elemento da lista*/
};

struct lista{
char info[21]; /*Nesse caso você desperdiça um pouco de espaço, mas não precisa ficar alocando a string dinamicamente, sendo permetido colocar 20 caracteres*/
char struct lista *Prox; /*ponteiro para o proximo elemento da lista*/
};

Uma ultima sugestão é utilizar o typedef para não ficar repetindo struct lista o tempo todo. É isso... Qualquer duvida pergunte.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...