Estou estudando listas em C, e sinceramente, estou achando a coisa mais difícil do mundo porque não sei bem a aplicação disso. Alguém sabe um livro ou pode ser até um pdf que mostre como funciona uma lista? Tipo, dando os conceitos e tal, mas mostrando um código que de para entender bem, porque nos livros que vi dão apenas o conceito e o cara que se vire para usar aquela coisa de tipo abstrato de dados, estou bem confuso D: Agradeço a quem ajudar
Boa tarde,
Estou com duvida nesse exercício e não sei nem por onde começar.
Construir um TAD FilaClientes, conforme a especificação abaixo.
1. Trata-se de uma fila construída sobre lista encadeada 2. Deve ser uma fila de Clientes, e cliente deve ser uma estrutura contendo: - nome (char[]) - idade (int) - CFP (int) 2. Cada node da fila deve ter um ponteiro para um Cliente e um ponteiro para o próximo node 3. Recomenda-se a utilização de uma estrutura HEADER (FilaCliente) para definir a Fila 4. A TAD FilaCliente deve implementar as seguintes operações: - FilaCliente * criaFilaCliente() -> Cria fila vazia - int enqueue2(FilaCliente *fila, Cliente *cliente) -> Enfileira (insere) cliente já instanciado - int enqueue(FilaCliente *fila, char nome[], int idade, int cpf) -> Enfileira (insere) cliente com base em seus dados - Cliente * dequeue(FilaCliente *fila) -> Desenfileira (remove) cliente da fila e o retorna - Cliente * head(FilaCliente *fila) -> Retorna dados (referência) do primeiro cliente da fila, sem removê-lo - Cliente * tail(FilaCliente *fila) -> Retorna dados (referência) do último cliente da fila, sem removê-lo - void imprimeFila(FilaCliente *fila) -> Função para teste, deve imprimir os dados dos clientes na fila, do primeiro para o último
Grato desde já.
Pessoal, eu tenho que criar uma lista encadeada que permita inserir e remover dados organizando-os em ordem alfabética( de acordo com o nome inserido). Consigo fazer isso em código comum, mas usando listas fica muito difícil. Estou tendo muita dificuldade. Envio o código, mas não compila, está cheio de falhas que eu não faço ideia de como solucionar. Obrigado.
Este é o código onde desenvolvo as listas e as estruturas
#include<stdilib.h>
#include<stdio.h>
#include<string.h>
//nodo principal do código
struct nodo{
int matricula;
char nome[40];
float nota;
struct nodo *prox;
};
//ponteiro para o nodo. Inicio da lista
struct nodo *inicio;//variavel global, acessavel por todos
//função de inserção de dados
//data= dados, n=posição
void insert(int matricula, char nome[40], float nota){
//variavel auxiliar.
struct nodo *temp;
//conferir alocação de memoria com a criação de um nodo
//criar um ponteiro para o nodo
struct nodo* novo = (struct nodo*)malloc(sizeof(struct nodo*));
if(novo==NULL){
printf("sem memoria!");
}
//se read estiver fazia,enfia o valor em inicio.
if inicio(==NULL){
novo->matricula= data;// preenche com o valor
//FALTA PREENCHER O RESTO
novo->prox = NULL;//a proxima posição aponta para null.
inicio = novo;//inicio aponta para a 1º posição
}else{
//se o inicio não estiver vazio, preenche o nodo
novo->matricula;
novo->nome;
novo->nota;
while(strcmp(temp->data,novo->data)>0){//substituir data aqui
temp= temp->prox;//variavel temporaria aponta para o proximo.
temp->prox = novo;//depois aponta para novo.
}
}
}
void Mostrar(){
struct nodo *aux = inicio;
printf("INICIO: %p\n", inicio);
while (aux != NULL) {
printf("%p|%.2f|%s|%d\n", aux, aux->nota,aux->nome,aux->matricula);
aux = aux->prox;
}
printf("\n");
}
int Retirar(){
struct nodo *aux, *auxOld;
if (inicio == NULL)
return 0;
/// Percorrer a lista ate o fim
aux = inicio;
auxOld = NULL;
while (aux->prox != NULL) {
auxOld = aux;
aux = aux->prox;
}
free(aux);
auxOld->prox = NULL;
return 1;
}