Ir para conteúdo

POWERED BY:

Arquivado

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

Angel***

[Resolvido] Trabalho com lista encadeada, fila linear e c

Recommended Posts

Boa Noite,

 

Preciso de uma ajuda com um trabalho,

preciso implementar um algoritmo com:

- Fila linear E

- Fila circular

Utilizando o controle de listas (ligadas , encadeadas)

O Algoritmo deve solicitar a quantidade de valores armazenados. (controle de overflow)

O programa deve permitir: incluir valores, remover e listar

Na listagem deverá apresentar:

- Valor armazenado

- Endereço do nó atual

- Endereço do próximo nó

- Endereço Inicio da fila

- Endereço Fim da fila

 

 

--------------------%

L-| E1 | E2 | E3 | ---endereço atual

I-| 10 | 5 | 4 | ---valor

N-| E2 | E3 | NULL | ---endereço do proximo

E-|-----------------|

A-| INICIO: E1 |

R-| FIM: E3---------|

--------------------%

 

----------------------%

C-| E1 | E2 | E3 | E4 | ---endereço atual

I- | 10 | 5 | 4 | 3 | ---valor

R-| E2 | E3 | E4 | E1 | ---endereço do proximo

C-|-------------------|

U---------------------|

| INICIO: E1 |

L-| FIM: E3-----------|

A---------------------|

R---------------------%

 

Se pouderem me ajudar, eu agradeço muito!!!

Obrigada!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual é a dúvida?

 

Oi, então, é um trabalho e estou meio perdida em implementar o algoritmo com filas +

listas encadeadas, você pode me ajudar? não consigui nem começar ainda...

se puder me add no msn!

 

Obrigada!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Angel, postei um tutorial sobre lista encadeada circular a pouco tempo aqui no fórum, acho que vai te ajudar um pouquinho!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Angel, postei um tutorial sobre lista encadeada circular a pouco tempo aqui no fórum, acho que vai te ajudar um pouquinho!

Muito obrigada!!

mas é q to precisando de uma ajudinha...

olhe consegui montar uma parte do código mas ele mostra errado e não faz tudo o q preciso..

pode me ajudar??

 

Muito obrigada!!!!

Segue código:

 

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


struct no
{
	int info;
	struct no* prox;
};
	typedef struct no No;



struct fila
{
	No* ini;
	No* fim;

};
	typedef struct fila Fila;

	// funcoes 
Fila* cria (void);
No* ins_fim (No* fim, int v);
No* ret_ini (No* ini);
void insere (Fila* f, int v);
int retira (Fila* f);
int vazia (Fila* f);
void libera (Fila* f);
void imprime (Fila* f);
void imprime_end (Fila* f);
void imprime_end_prox (Fila* f);




int main (void)
{
	Fila* f;
	f = cria();


	int lim=0,tam=0,vlr,opc,menu=1;

	while (menu!=0)
	{
		clrscr();
		printf("\n\t \t   * * * Filas e Listas Encadeadas * * *\t \t \n");
		printf("\n\t \t   * Escolha uma opcao *\t \t \n");
		printf("\n 1- Informe o tamanho para a lista: ");
		printf("\n 2- Insere um valor na lista");
		printf("\n 3- Mostrar a lista");
		printf("\n 4- Remover um valor da lista");
		printf("\n 5- Para sair\n\n");
		scanf("%d", &opc);
	switch (opc)
		{
			case 1:
			printf("tamanho :");
			scanf ("%d", &tam);
			break;


			case 2:
			if ((!tam) || (tam==lim))
			{
				printf("Primeiro tenha um tamanho valido e maior do q zero!!!");
				getch();
			}
			else
			{
				printf("informe o valor para inserir");
				scanf ("%d", &vlr);
				insere (f, vlr);
				lim++;
				}

			break;


			case 3:
			printf("Configuracao da fila:\n");
			imprime(f);
			imprime_end (f);
			imprime_end_prox (f);
			getch();
			break;

			case 4:
			retira(f);
			lim--;

			break;



			case 5:
				libera(f);
				exit(1);
			break;
		}//Switch Case
	}// While
	return 0;
}// main

Fila* cria (void)
{
	Fila* f = (Fila*) malloc(sizeof(Fila));
	f->ini = f->fim = NULL;
	return f;
}



No* ins_fim (No* fim, int v)
{
	No* p = (No*) malloc(sizeof(No));
	p->info = v;
	p->prox = NULL;
	if (fim != NULL) 
	fim->prox = p;
	return p;
}


No* ret_ini (No* ini)
{
	No* p = ini->prox;
	free(ini);
	return p;
}

void insere (Fila* f, int v)
{
	f->fim = ins_fim(f->fim,v);
	if (f->ini==NULL) 
	f->ini = f->fim;
}



int retira (Fila* f)
{
	int v;
	if (vazia(f))
	{
		printf("Fila vazia.\n");
		exit(1); 
	}
	v = f->ini->info;
	f->ini = ret_ini(f->ini);
	if (f->ini == NULL) 
		f->fim = NULL;
	return v;
}



int vazia (Fila* f)
{
	return (f->ini==NULL);
}



void libera (Fila* f)
{
No* q = f->ini;
while (q!=NULL) {
No* t = q->prox;
free(q);
q = t;
}
free(f);
}


 
void imprime (Fila* f)
{
	No* q;
	for (q=f->ini; q!=NULL; q=q->prox)
	printf("%d\n",(*q).info);
}

 
void imprime_end (Fila* f)
{
	No* q;
	for (q=f->ini; q!=NULL; q=q->prox)
	printf("%d\n",&(*q).info);
}



 
void imprime_end_prox (Fila* f)
{
	No* q;
	for (q=f->ini; q!=NULL; q=q->prox)
	printf("%d\n",(*q).prox);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

oq seu codigo naum faz?? q erros q aparecem?

 

[]'s

 

---Título editado---

 

Ajuda - trabalho com lista encadeada, fila linear e c http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Trabalho com lista encadeada, fila linear e c

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi,então

Não consigo mostrar :

- Endereço do nó atual

- Endereço do próximo nó

- Endereço Inicio da fila

- Endereço Fim da fila

 

e tbm não exclui os valores quando solicitado...

 

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce testou essa função?

 

void imprime_end (Fila* f)
{
	No* q;
	for (q=f->ini; q!=NULL; q=q->prox)
	printf("%d\n",&(*q).info);
}

Se sim, qual problema(s) voce encontrou?

Faz tempo que não trabalho com C, mas pelo que lembro voce pode fazer isso:

 

void imprime_end (Fila* f)
{
	No* q;
	for (q=f->ini; q!=NULL; q=q->prox)
	printf("%d\n",q);
}

Esse seria os endereços dos registros que contém um inteiro e um ponteiro para uma outra estrutura dessas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce testou essa função?

 

Se sim, qual problema(s) voce encontrou?

Faz tempo que não trabalho com C, mas pelo que lembro voce pode fazer isso:

Oi!

Muito obrigada!!

testei e funcionou, mas acabei fazendo de outra forma.

mas funcionou e mostrou certinho!

 

Muito Obrigada!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.