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

ajuda com lista encadeada


Eliza21

Pergunta

- Olá, pessoal, tentei hoje o dia inteiro resolver esse problema que foi proposto por meu professor, gostaria que se possível alguém me ajude com a implementação...

==================================================================================

Tarefa:

Construa um programa para executar as operações básicas sobre uma lista linear encadeada implementada sobre um arranjo (simulação de lista encadeada) conforme segue:

• Varias lista são implementadas sobre o mesmo arranjo, logo deve haver uma opção no menu do programa principal para permitir que o usuário defina o espaço do arranjo que será utilizado pela lista.

• Definir uma opção do menu para cada operação básica sobre lista, conforme visto em sala de aula, ou seja: criação de lista vazia, inserção(no inicio, no fim ou entre nodos), consulta, remoção e destruição da lista.

• Opção no menu para listar o conteúdo da lista e também uma opção para listar as posições livres dentro do espaço reservado para a lista.

• Nas operações de consulta e remoção o usuário deve fornecer a ordem do nodo da lista que será consultado/removido.

• O menu deve ser construído de forma que o usuário possa escolher livremente a ordem de execução das operações.

==================================================================================

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

#define nulo -1   //indicativo de valor nulo
#define QTNO 100  //constante do arranjo
#define false 1
#define true 0

struct TNodo 
{
    int info;
    int prox;
};

TNodo ar[QTNO];

int le,pl;

void Criar_Les(int prim,int ult); //função criar uma lista vazia


int Alocar_Les();  //função p/ alocar uma posição livre no arranjo.
                   // Ela sempre retorna o indice da primeira posição livre ou nulo caso não haja espaço disponível


void Liberar_Les(int k); //função p/ liberar uma posição no arranjo
                                                                                         

void Criar_Les(int prim,int ult) //função criar uma lista vazia
{
     int ind;
     le=nulo;
     pl=prim;
     
     for(ind=prim;ult-1;ind++)
     {//encadeamento dos nodos da lista de posições
       ar[ind].prox=ind+1;
     }
     ar[ult].prox=nulo;
     
}


int Alocar_Les()
{
    int aux;
    aux=pl;
    if (aux!=nulo)
    {
        pl=ar[aux].prox;
    }
    return aux;
}




void Liberar_Les(int k)
{
     int aux;
     ar[k].prox=pl;
     pl=k;
 }


int inserirNI_LES(int Pinfo) 
{
    int nn;
    int res;
    res=1;
    nn = Alocar_Les();
       if (nn==nulo)
       printf("não há espaço disponivel");
    else 
    {
         res=0;
         ar[nn].prox= le;
         ar[nn].info=Pinfo;
         le=nn;
    }
    return res;
}
    
int inserirNF_LES(int Pinfo) 
{
    int nn,un;
    int res;
    res=1;
    nn = Alocar_Les();
       if (nn==nulo)
       printf("não há espaço disponivel");
    else 
    {
         res=0;
         ar[nn].info= Pinfo;
         un=le;
         if (le != nulo) 
         {
                while(ar[un].prox != nulo) 
                {
                un=ar[un].prox;
                }
             ar[nn].prox=ar[un].prox;
             ar[un].prox= nn;
         }
         else 
         {
              ar[nn].prox= le;
              le=nn;
         }
    }
    return res;
}

int inserirNE_LES(int k, int Pinfo) 
{
    int nn,na,aux;
    int res;
    res=1;
    if (k<1) 
    {
       printf("posiçao invalida!");
       system("pause");
    }
    else 
    {
         aux=1;
         while((ar[na].prox!= nulo) && (aux < k-1) ) 
         {
                na = ar[na].prox;
                aux= aux+1;
         }
    }
    if ((k==1) | (aux==k-1)) 
    {
               nn = Alocar_Les();
               if (nn==nulo) 
               {
                  printf("Não há espaço disponivel");
                  return res;
                  system("pause");
               }
               ar[nn].info=Pinfo;
               ar[nn].prox=nulo;
               if(k==1) 
               {
                        ar[nn].prox=le;
                        le=nn;
                        res=0;
               }
               else 
               {
                    ar[nn].prox= ar[na].prox;
                    ar[na].prox= nn;
                    res=0;
               }
     }
     return res;
}
               


int main(int argc, char *argv[])
{
    int i,prim,ult,k,;
    i=nulo;
    if (i==nulo)
    {
       printf("Valor nulo\n");         
    }
    else
    {
        Criar_Les(prim,ult);
        Alocar_Les();
        Liberar_Les(k);
        //inserirNI_LES(Pinfo);
    }
    system ("pause");
    return 0;
}

Até que comecei.. no sei se to indo no caminho certo... mas a dúvida maior é de como vou definir o tamanho das listas dentro dentro de um mesmo arranjo....

estou indo no caminho certo????

OBRIGADA!!!

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

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,3k
    • Posts
      652,4k
×
×
  • Criar Novo...