Ir para conteúdo
Fórum Script Brasil
  • 0

Armazenar Em Lista Circular... Alguém Sabe?


kati690

Pergunta

Gente, tenho um programa para abrir arquivos em C e armazenar em um vetor.

está aí:

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

struct no

{

char ID[2];

int tamanho;

};

typedef struct no No;

int main()

{

No vetor[15];

int N=0,i;

char nome[10];

FILE * pFile;

pFile = fopen ("myfile.txt","r");

if (pFile!=NULL)

{

fscanf(pFile,"%d",&N);

printf("%d",N);

getche();

for (i=0; i < N; i++)

{

fscanf(pFile,"%s %d",&vetor.ID,&vetor.tamanho);

}

fclose(pFile);

}

for (i=0; i<N; i++)

{

printf("Nome: %s Tamanh %d\n\n",vetor.ID,vetor.tamanho);

}

getch();

return 0;

}

O arquivo que ele abre é o seguinte:

p1 2

p2 3

p3 20

p4 15

p5 24

*fazer no bloco de notas

os valores que vem depois do p... (que podem ser qualquer um) tem que ser armazenados em uma lista circular...

Alguém sabe como fazer?

Como armazenar o arquivo aberto em uma lista circular?

me ajudem por favor

Beijinhos!!!

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Você sabe percorrer o vetor, certo? Porque é isso que o código abaixo faz:

for (i=0; i<N; i++)
{
    printf("Nome: %s Tamanh %d\n\n",vetor[i].ID,vetor[i].tamanho);
}

Então, bastaria chamar a função de inserção (que tem na página que você indicou) para cada um dos elementos do vetor.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Guest - Kati690 -

void Inserir(Lista *lista, int v) {

pNo no;

no = (pNo)malloc(sizeof(tipoNo));

nodo->valor = v;

if(*lista == NULL) *lista = no;

else no->seguinte = (*lista)->seguinte;

(*lista)->seguinte = no;

}

Aquele que tenho, captura o nome dos processos ex: p1 e o valor... Não sei como faço pra atribuir esse valor ao nó! Como ele recebe... como faz a chamada?

você me ajuda por favor?!

Link para o comentário
Compartilhar em outros sites

  • 0

No caso, você vai ter que alterar a estrutura do nó para poder guardar os dados que você quer. A estrutura daquele lá na página é:

typedef struct no { int value;
                    struct no *next;
                   } lista;

O importante ali é o int value que é o campo que armazenará o "valor" do nó. No caso, é um inteiro (int). A idéia é trocar ele pelo tipo de dado que você quer armazenar (que pode ser outra estrutura, como a que você declarou no seu código).

Não estou com tempo agora, mas posso ver se no próximo final de semana eu faço um exemplo disso pra você. É só me lembrar.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Como prometido, segue um exemplo:

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

typedef struct dado {
       char ID[3];
       int tamanho;
} Dado;

typedef struct no { Dado value;
                    no *next;
                   } Lista;


Lista *CriarNo(Dado valorinicial)
{
     Lista *L = (no *)malloc(sizeof(no));
     L->value = valorinicial;
     L->next = L;
     return L;
}

Lista *Adicionar(Lista *l, Dado elemento)
{
     Lista *k = CriarNo(elemento);

     k->next = l->next;
     l->next = k;

     return k;
}

int main()
{
    Dado x = {"p1", 2};
    Dado y = {"p2", 3};
    Dado z = {"p3", 20};
        
    Lista *L = CriarNo(x);

    Lista *P = L;
    P = Adicionar(P, y);
    P = Adicionar(P, z);

    Lista *K = L;
    do
    {
        printf("%s = %i\n", K->value.ID, K->value.tamanho);    
        K = K->next;
    } while (K!=L);

    system("pause");
}

Note que criei três objetos do tipo Dado e os adicionei na lista. Em seguida percorri a lista exibindo os mesmos. É claro que no seu caso estes objetos virão do arquivo, mas você poderá utilizar as funções que criei acima (CriarNo() e Adicionar()).

Certo? ;)

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

ola, estou com dificuldades para inserir elementos na lista circular em sentido horario (esquerda para direita),só consigo da direita para esquerda - codigo abaixo... alguém pode me ajudar? obrigado

void insere(char x)
{
   Sold *novo;
   novo=cria_sold();
   novo->nome=x;
   if(circular==NULL)
   {
      novo->prox=novo;
      circular=novo;       
   }
   else
   {
      novo->prox = circular->prox;
      circular->prox=novo;
   }                                                                                 
}

Link para o comentário
Compartilhar em outros sites

  • 0

NOssa, por que desenterrar um post tão antigo??? Sua dúvida não tem nada haver com aquela...

Não faz sentido pra mim mudar o sentido da lista circular...A lista é linear, mesmo sendo usada de forma circular, então se eu entendi direito, você quer colocar elementos no inicio da lista ao invés de colocar no final.

Sendo assim, é só criar um novo elemento e apontar seu elemento próximo para o mesmo elemento que o seu ponteiro "cabeça" aponta. Logo em seguida, pegue o ultimo elemento através do ponteiro "cauda" e aponte o seu próximo elemento para o novo elemento criado.

Nossa, até de C/C++ o GrayMa manja....caraca irmão....A lenda.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...