Ir ao conteúdo
  • Cadastre-se

Estrutura de dados, lista linear


nexus.tecinfo

Posts recomendados

Bom dia galera conectada,

estou com um exercicio para resolver e esta dando errado, é o seguinte:

fazer uma lista onde a pessoa possa escolher o que fazer, dai tudo bem, mais quando pede para ordenar não estou conseguindo termina-la. Alguem poderia me ajudar, pois ainda terei que fazer o Acesso a Nodo identificado

através do conteúdo ordenado, por isto que terei que ordenar.

Agradeço...


#include<stdio.h>
#include<stdlib.h>
#define N 5

/*prototipo*/

int menu(void);
int inserir_inicio(int LL[],int IA,int FA,int *IL,int *FL,int no);
int inserir_ultimo(int LL[],int IA,int FA,int *IL,int *FL,int no);
int inserir_meio(int LL[],int IA,int FA,int *IL,int *FL,int K,int no);
int inserir_meio_otimizado(int LL[],int IA,int FA,int *IL,int *FL,int K,int no);
int remover(int LL[],int IA,int FA,int *IL,int *FL,int K);
int acesso_ident(int LL[],int *IL,int *FL,int K);
int acesso_ident_cont(int LL[],int *IL,int *FL, int val_busc);
[COLOR="Red"]int ordenar(int LL[], int *IL, int *FL, int no);
[/COLOR]
void mostrar(int LL[],int IA,int FA,int IL,int FL);

int main()
{
/* entradas*/
int LL[N],IA=0,FA=N-1,IL=-1,FL=-1,no,K,op=1,resp,posicao,val_busc;
while (op!=0){

op=menu();
switch (op){
case 1:
printf("\nDigite o valor do NO: ");
scanf("%d",&no);
resp=inserir_inicio(LL,IA,FA,&IL,&FL,no);
if (resp==1)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 2:
printf("\nDigite o valor do NO: ");
scanf("%d",&no);
resp=inserir_ultimo(LL,IA,FA,&IL,&FL,no);
if (resp==2)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 3:
printf("\nDigite o valor do NO: ");
scanf("%d",&no);
printf("Digite o local : ");
scanf("%d",&K);
resp=inserir_meio(LL,IA,FA,&IL,&FL,K,no);
if (resp==3)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 4:
printf("\nDigite o valor do NO: ");
scanf("%d",&no);
printf("Digite o local : ");
scanf("%d",&K);
resp=inserir_meio_otimizado(LL,IA,FA,&IL,&FL,K,no);
if (resp==3)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 5:
printf("Digite o local a ser removido: ");
scanf("%d",&K);
resp=remover(LL,IA,FA,&IL,&FL,K);
if (resp==3)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 6:

printf("Digite o local a ser acessado: ");
scanf("%d",&K);
resp=acesso_ident(LL, &IL, &FL, K);
if (resp==1)
printf("Nao encontrado\n");
else
printf("\nNa posicao %d foi encotrado o valor: %d\n\n\n",K,resp);
break;
case 7:
printf("Digite o conteudo a ser acessado: ");
scanf("%d",&val_busc);
resp=acesso_ident_cont(LL, &IL, &FL, val_busc);

if (resp==-1)
printf("Nao encontrado\n");
else
printf("\nO Valor %d encontrado na Posicao : %d\n\n\n",val_busc,resp);
break;
[COLOR="Red"] case 8:
printf("Digite para ordenar: ");
if (IL>FL)
resp=ordenar(LL,&IL,&FL,no);

if (resp==IL<FL)
printf("\nJa esta ordenado\n");
else
printf("\nOrdenado com sucesso!!!\n");
break;[/COLOR]
case 0:
printf("\n\nSair");
break;
default:
printf("\nOpcao Invalida!!!");
}
mostrar(LL,IA,FA,IL,FL);
}
}
/*implementaçãoo das funções*/
int menu()
{
int op;
printf("\n----MENU-----\n");
printf("\nDigite [1] para Insercao no Inicio da Lista: ");
printf("\nDigite [2] para Insercao com Ultimo Nodo da Lista:");
printf("\nDigite [3] para Insercao no meio do Nodo da Lista:");
printf("\nDigite [4] para Insercao no meio Otimizado do Nodo da Lista:");
printf("\nDigite [5] para Remover Nodo da Lista:");
printf("\nDigite [6] para acesso identificado no Nodo da Lista:");
printf("\nDigite [7] para acesso identificado atraves do conteudo no Nodo da Lista:");
[COLOR="Red"]printf("\nDigite [8] para ordenar:");[/COLOR]
printf("\nDigite [0] para sair:");
printf("\nEscolha uma opcao: ");
scanf("%d",&op);
return op;
}
/*implementando a função*/

/*insere no inicio*/
int inserir_inicio(int LL[],int IA,int FA,int *IL,int *FL,int no)
{
int Ind;
if ((IA == *IL) && (FA == *FL))
return 1;

else
{
if (*IL == -1)
*IL = *FL = IA;
else if (*IL > IA)
(*IL)--;

else
{ /*Deslocar nodos para cima*/

for (Ind =*FL; Ind>=*IL; Ind--)
LL[Ind+1]=LL[Ind];
(*FL)++;
}
LL[*IL] = no;

return 0;
}
}
/*insere no ultimo*/
int inserir_ultimo(int LL[],int IA,int FA,int *IL,int *FL,int no)
{
int Ind;
if ((IA == *IL) && (FA == *FL))
return 1;

else
{
if (*IL == -1)
*IL = *FL = IA;
else if (*FL < FA)
(*FL)++;

else
{ /*Deslocar nodos para cima*/

for (Ind =*IL; Ind>=*FL; Ind++)
LL[Ind-1]=LL[Ind];
(*IL)--;
}
LL[*FL] = no;

return 0;
}
}

/*insere meio*/


int inserir_meio(int LL[],int IA,int FA,int *IL,int *FL,int K,int no)
{
int Ind;
if ((IA == *IL) && (FA == *FL)||(K >*FL-*IL+2)||(K<=0)||(*IL==-1)&&(K!=1))
return 1;

else
{
if (*IL == -1)
*IL = *FL = IA;
else if (*FL < FA) /*Deslocar nodos para cima*/
{
for (Ind =*FL; Ind>=*IL+K-1; Ind--)
LL[Ind+1]=LL[Ind];
(*FL)++;
}

else
{ /*Deslocar nodos para esquerda*/

for (Ind =*IL; Ind>=*IL+K+1; Ind++)
LL[Ind-1]=LL[Ind];
{
(*IL)--;
K++;
}
}
LL[*IL + K-1] = no;

return 0;
}
}

int inserir_meio_otimizado(int LL[],int IA,int FA,int *IL,int *FL,int K,int no)
{
int Ind;
if ((IA == *IL) && (FA == *FL)||(K >*FL-*IL+2)||(K<=0)||(K>FA))
return 1;

else
{
if (*IL == 0)
*IL = *FL = (FA-IA+1) / 2;
else if ((*IL == IA) || (*FL < FA) && (K>(*FL-*IL+2)/2))
{ /*Deslocar nodos para cima*/
for (Ind =*FL; Ind>=*IL+K-1; Ind++)
LL[Ind+1]=LL[Ind];
(*FL)++;
}

else
{ /*Deslocar nodos para baixo*/

for (Ind =*IL; Ind>=1; *IL+K+1)
LL[Ind-1]=LL[Ind];
{
(*IL)--;
K++;
}
}
LL[*IL + K-1] = no;

return 0;
}
}

int remover(int LL[],int IA,int FA,int *IL,int *FL,int K)
{
int Ind;
if ((K <= 0) || (K>*FL-*IL+1))
return 1;


else
{
for (Ind =*IL+K-1; Ind>=*FL; Ind++)
LL[Ind]=LL[Ind+1];
(*FL)--;

if (*FL == *IL-1)
*IL=*FL=0;

return 0;
}
}

int acesso_ident(int LL[],int *IL,int *FL,int K)
{
if ((K <= 0) || (K >*FL-*IL+1)||(*IL=0))
return 1;
else
{
return LL[*IL+K-1];
}
}

int acesso_ident_cont(int LL[],int *IL,int *FL, int val_busc)
{
int I, posicao;
I=*IL;
while(I<=*FL)
{
if (LL[I]==val_busc)
return (I-*IL+1);
else
I++;
}
return -1;
}
[COLOR="Red"]int ordenar(int LL[], int *IL, int *FL, int no)

{
int aux;
aux=*IL; //* ->invertir o conteudo do ponteiro
*IL=*FL;
*FL=aux;
}
[/COLOR]

void mostrar(int LL[],int IA,int FA,int IL,int FL)
{
int i;
for(i=IA;i<=FA;i++)
{
if(i<IL || i>FL)
printf("\t-");
else
printf("\t%d",LL[i]);
}
}

Link para o comentário
Compartilhar em outros sites

int temp, i, j;

for(i = 0; i < tam; i++){

for(j = 0; j < tam; j++){

if(matriz < matriz[j]){

temp = matriz;

matriz = matriz[j];

matriz[j] = temp;

}

}

}

é só organizar para o que você quer...

fiz desta forma e mesmo assim não esta chegando ao resultado


int ordenar(int LL[], int *IL, int *FL)

{
int x, i, j;

for(i = 0; i < *FL; i++){ /*enquanto i igual a 0; i menor que o Final da lista, faça*/

for(j = 0; j < *IL; j++){ /*enquanto j for igual a 0; j menor que Inicio da Lista, faça*/
if(LL[i] < LL[j]){ /*se o vetor Lista Linear de i for menor que o vetor da Lista Linear de j*/
*IL = LL[i]; /* o valor do Inicio da Lista vai receber o vetor Lista Linear i */
LL[i] = LL[j]; /* O vetor Lista Linear i recebe o vetor Lista Linear j d*/
LL[j] = *FL; /* o vetor lista linear j recebe o valor do Final da Lista */
/*coloquei este x no lugar do *IL e do *FL recebendo nos vetores e nada*/
}
}
}
}

Edit: Resolvido, segue o codigo pronto para duvidas de alguem que tenha.


#include<stdio.h>
#include<stdlib.h>
#define N 5

/*prototipo*/

int menu(void);
int inserir_inicio(int LL[],int IA,int FA,int *IL,int *FL,int no);
int inserir_ultimo(int LL[],int IA,int FA,int *IL,int *FL,int no);
int inserir_meio(int LL[],int IA,int FA,int *IL,int *FL,int K,int no);
int inserir_meio_otimizado(int LL[],int IA,int FA,int *IL,int *FL,int K,int no);
int remover(int LL[],int IA,int FA,int *IL,int *FL,int K);
int acesso_ident(int LL[],int *IL,int *FL,int K);
int acesso_ident_cont(int LL[],int *IL,int *FL, int val_busc);
int ordenar(int LL[],int IA,int FA,int IL,int FL);
int acesso_ident_cont_orden(int LL[],int *IL,int *FL, int val_busc);

void mostrar(int LL[],int IA,int FA,int IL,int FL);

int main()
{
/* entradas*/
int LL[N],IA=0,FA=N-1,IL=-1,FL=-1,no,K,op=1,resp,posicao,val_busc;
while (op!=0){

op=menu();
switch (op){
case 1:
printf("\nDigite o valor do NO: ");
scanf("%d",&no);
resp=inserir_inicio(LL,IA,FA,&IL,&FL,no);
if (resp==1)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 2:
printf("\nDigite o valor do NO: ");
scanf("%d",&no);
resp=inserir_ultimo(LL,IA,FA,&IL,&FL,no);
if (resp==2)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 3:
printf("\nDigite o valor do NO: ");
scanf("%d",&no);
printf("Digite o local : ");
scanf("%d",&K);
resp=inserir_meio(LL,IA,FA,&IL,&FL,K,no);
if (resp==3)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 4:
printf("\nDigite o valor do NO: ");
scanf("%d",&no);
printf("Digite o local : ");
scanf("%d",&K);
resp=inserir_meio_otimizado(LL,IA,FA,&IL,&FL,K,no);
if (resp==3)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 5:
printf("Digite o local a ser removido: ");
scanf("%d",&K);
resp=remover(LL,IA,FA,&IL,&FL,K);
if (resp==3)
printf("Lista cheia\n");
else
printf("No cadastrado com Sucesso:\n");
break;
case 6:

printf("Digite o local a ser acessado: ");
scanf("%d",&K);
resp=acesso_ident(LL, &IL, &FL, K);
if (resp==1)
printf("Nao encontrado\n");
else
printf("\nNa posicao %d foi encotrado o valor: %d\n\n\n",K,resp);
break;
case 7:
printf("Digite o conteudo a ser acessado: ");
scanf("%d",&val_busc);
resp=acesso_ident_cont(LL, &IL, &FL, val_busc);

if (resp==-1)
printf("Nao encontrado\n");
else
printf("\nO Valor %d encontrado na Posicao : %d\n\n\n",val_busc,resp);
break;
case 8:
resp=ordenar(LL,IA,FA,IL,FL);
printf("\nOrdenado com sucesso!!!\n");
break;
case 9:
printf("Digite o conteudo a ser acessado: ");
scanf("%d",&val_busc);
resp=acesso_ident_cont(LL, &IL, &FL, val_busc);

if (resp==-1)
printf("Nao encontrado\n");
else
printf("\nO Valor %d encontrado na Posicao : %d\n\n\n",val_busc,resp);
break;

case 0:
printf("\n\nSair");
break;
default:
printf("\nOpcao Invalida!!!");
}
mostrar(LL,IA,FA,IL,FL);
}
}
/*implementação das funções*/
int menu()
{
int op;
printf("\n----MENU-----\n");
printf("\nDigite [1] para Insercao no Inicio da Lista: ");
printf("\nDigite [2] para Insercao com Ultimo Nodo da Lista:");
printf("\nDigite [3] para Insercao no meio do Nodo da Lista:");
printf("\nDigite [4] para Insercao no meio Otimizado do Nodo da Lista:");
printf("\nDigite [5] para Remover Nodo da Lista:");
printf("\nDigite [6] para acesso identificado no Nodo da Lista:");
printf("\nDigite [7] para acesso identificado atraves do conteudo no Nodo da Lista:");
printf("\nDigite [8] para ordenar:");
printf("\nDigite [9] para acesso identificado atraves do conteudo ordenado no Nodo da Lista:");
printf("\nDigite [0] para sair:");
printf("\nEscolha uma opcao: ");
scanf("%d",&op);
return op;
}
/*implementando a função*/

/*insere no inicio*/
int inserir_inicio(int LL[],int IA,int FA,int *IL,int *FL,int no)
{
int Ind;
if ((IA == *IL) && (FA == *FL))
return 1;

else
{
if (*IL == -1)
*IL = *FL = IA;
else if (*IL > IA)
(*IL)--;

else
{ /*Deslocar nodos para cima*/

for (Ind =*FL; Ind>=*IL; Ind--)
LL[Ind+1]=LL[Ind];
(*FL)++;
}
LL[*IL] = no;

return 0;
}
}
/*insere no ultimo*/
int inserir_ultimo(int LL[],int IA,int FA,int *IL,int *FL,int no)
{
int Ind;
if ((IA == *IL) && (FA == *FL))
return 1;

else
{
if (*IL == -1)
*IL = *FL = IA;
else if (*FL < FA)
(*FL)++;

else
{ /*Deslocar nodos para cima*/

for (Ind =*IL; Ind>=*FL; Ind++)
LL[Ind-1]=LL[Ind];
(*IL)--;
}
LL[*FL] = no;

return 0;
}
}

/*insere meio*/


int inserir_meio(int LL[],int IA,int FA,int *IL,int *FL,int K,int no)
{
int Ind;
if ((IA == *IL) && (FA == *FL)||(K >*FL-*IL+2)||(K<=0)||(*IL==-1)&&(K!=1))
return 1;

else
{
if (*IL == -1)
*IL = *FL = IA;
else if (*FL < FA) /*Deslocar nodos para cima*/
{
for (Ind =*FL; Ind>=*IL+K-1; Ind--)
LL[Ind+1]=LL[Ind];
(*FL)++;
}

else
{ /*Deslocar nodos para esquerda*/

for (Ind =*IL; Ind>=*IL+K+1; Ind++)
LL[Ind-1]=LL[Ind];
{
(*IL)--;
K++;
}
}
LL[*IL + K-1] = no;

return 0;
}
}

int inserir_meio_otimizado(int LL[],int IA,int FA,int *IL,int *FL,int K,int no)
{
int Ind;
if ((IA == *IL) && (FA == *FL)||(K >*FL-*IL+2)||(K<=0)||(K>FA))
return 1;

else
{
if (*IL == 0)
*IL = *FL = (FA-IA+1) / 2;
else if ((*IL == IA) || (*FL < FA) && (K>(*FL-*IL+2)/2))
{ /*Deslocar nodos para cima*/
for (Ind =*FL; Ind>=*IL+K-1; Ind++)
LL[Ind+1]=LL[Ind];
(*FL)++;
}

else
{ /*Deslocar nodos para baixo*/

for (Ind =*IL; Ind>=1; *IL+K+1)
LL[Ind-1]=LL[Ind];
{
(*IL)--;
K++;
}
}
LL[*IL + K-1] = no;

return 0;
}
}

int remover(int LL[],int IA,int FA,int *IL,int *FL,int K)
{
int Ind;
if ((K <= 0) || (K>*FL-*IL+1))
return 1;


else
{
for (Ind =*IL+K-1; Ind>=*FL; Ind++)
LL[Ind]=LL[Ind+1];
(*FL)--;

if (*FL == *IL-1)
*IL=*FL=0;

return 0;
}
}

int acesso_ident(int LL[],int *IL,int *FL,int K)
{
if ((K <= 0) || (K >*FL-*IL+1)||(*IL=0))
return 1;
else
{
return LL[*IL+K-1];
}
}

int acesso_ident_cont(int LL[],int *IL,int *FL, int val_busc)
{
int I, posicao;
I=*IL;
while(I<=*FL)
{
if (LL[I]==val_busc)
return (I-*IL+1);
else
I++;
}
return -1;
}
int ordenar(int LL[],int IA,int FA,int IL,int FL){
int i,j,temp;
if((FL-IL<=1)||(IL==-1))
return 1;
else {
for(j=0;j<=FL-IL;j++)
{
for(i=IL;i<=FL-j;i++)
{
if(LL[i]>LL[i+1]){
temp=LL[i];
LL[i]=LL[i+1];
LL[i+1]=temp;
}
}
}
return 0;
}
}

int acesso_ident_cont_orden(int LL[],int *IL,int *FL, int val_busc)

{
int meio,sup,inf;
inf=*IL;
sup=*FL;
while(inf<=sup)
{
meio=(inf+sup)/2;
if (LL[meio]==val_busc)
return (inf -*IL+1);
else if
(inf = meio+1);
else
sup=meio-1;
}
return -1;
}

void mostrar(int LL[],int IA,int FA,int IL,int FL)
{
int i;
for(i=IA;i<=FA;i++)
{
if(i<IL || i>FL)
printf("\t-");
else
printf("\t%d",LL[i]);
}
}

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!