As listas sequenciais são um tipo de estrutura de dados fundamental na programação, oferecendo uma maneira eficiente de armazenar e organizar coleções de dados. Neste tutorial, abordaremos a criação de listas sequenciais em C.
Uma lista sequencial é uma estrutura de dados que armazena elementos de forma contígua ou seja "um ao lado do outro" na memória. Ela permite acesso rápido aos elementos por índice.
Para implementar uma lista sequencial em C, você precisa definir um tipo de dado para o elemento da lista e declarar um vetor para armazenar os elementos. A seguir, um exemplo de implementação.
Agora vamos declarar as bibliotecas principais da linguagem:
#include <stdio.h> #include <stdlib.h>
Bem! agora por baixo do das bibliotecas que acabamos de incluir, começamos definindo a estrutura da lista, que consiste em um vetor de elementos do mesmo tipo e um campo para acompanhar o número de elementos presentes na lista: #define MAX_SIZE 100 typedef struct { int dados[MAX_SIZE]; int tamanho; }ListaSequencial ;
int main() { return 0; }
MAX_SIZE: Define o tamanho máximo da lista (pode ser ajustado conforme a necessidade).- Define o tipo de dado que será armazenado na lista (pode ser
int,float,char, etc.). dados: Vetor que armazena os elementos da lista.tamanho: Variável que armazena o número de elementos presentes na lista.
Como já devem ter percebido, não basta simplismente criar a lista; nós precisamos de algumas funções para manipular a lista; existem algumas funções principais que não podem ser ignorados quando o assunto é manipular listas.
Começaremos com a primeira função:
1 - Inicializar Lista:
void inicializarLista(Lista * lista) { lista -> tamanho = 0; }
Essa função simplesmente zera o campo tamanho da lista, deixando-a pronta para uso.
2 - Inserir Elemento no Final:
void inserirElementoFinal(Lista *lista, int valor) { if (lista->tamanho < MAX_SIZE) { lista->dados[lista->tamanho] = valor; lista->tamanho++; } else { printf("Lista cheia!\n"); } }
Essa função verifica se há espaço disponível na lista e, se sim, insere o novo elemento no final da lista e incrementa o tamanho.
int removerElementoFinal(Lista *lista) { int valorRemovido; if (lista->tamanho > 0) { lista->tamanho--; valorRemovido = lista->dados[lista->tamanho]; } else { printf("Lista vazia!\n"); valorRemovido = -1; // Valor sentinela para indicar erro } return valorRemovido; }
Essa função verifica se a lista não está vazia e, se sim, remove o último elemento da lista e retorna o valor removido.
4 - Buscar Elemento:
int buscarElemento(Lista *lista, int valor) { int i; for (i = 0; i < lista->tamanho; i++) { if (lista->dados[i] == valor) { return i; // Retorna o índice do elemento encontrado } } return -1; // Retorna -1 se o elemento não for encontrado }
Essa função percorre a lista comparando cada elemento com o valor desejado e, se encontrar o valor, retorna o índice da sua posição na lista.
5 - Imprimir Lista:
void imprimirLista(Lista *lista) { int i; for (i = 0; i < lista->tamanho; i++) { printf("%d ", lista->dados[i]); } printf("\n"); }
Essa função percorre a lista imprimindo cada elemento na tela.
Bem! Todas as funções para exemplificar foram construidas, vamos ver como ficou:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
typedef struct Lista {
int dados[MAX_SIZE];
int tamanho;
}Lista;
void inicializarLista(Lista *lista) {
lista->tamanho = 0;
}
void inserirElementoFinal(Lista *lista, int valor) {
if (lista->tamanho < MAX_SIZE) {
lista->dados[lista->tamanho] = valor;
lista->tamanho++;
} else {
printf("Lista cheia!\n");
}
}
int removerElementoFinal(Lista *lista) {
int valorRemovido;
if (lista->tamanho > 0) {
lista->tamanho--;
valorRemovido = lista->dados[lista->tamanho];
} else {
printf("Lista vazia!\n");
valorRemovido = -1; // Valor sentinela para indicar erro
}
return valorRemovido;
}
int buscarElemento(Lista *lista, int valor) {
int i;
for (i = 0; i < lista->tamanho; i++) {
if (lista->dados[i] == valor) {
return i; // Retorna o índice do elemento encontrado
}
}
return -1; // Retorna -1 se o elemento não for encontrado
}
void imprimirLista(Lista *lista) {
int i;
for (i = 0; i < lista->tamanho; i++) {
printf("%d ", lista->dados[i]);
}
printf("\n");
}
int main()
{
return 0;
}
Agora vamos ver como é que essa função devem ser chamados na nossa função Principal "Main".
Linhas:
int main(int argc, char *argv[]) { Lista lista; int op, valor; inicializarLista(&lista); do{ printf("\n\t 1 - Imprimir \n\t 2 - Inserir \n\t 3 - Pesquisar \n\t 4 - Remover \n\t Opcao: "); scanf("%d", &op); switch(op){ case 1: imprimirLista(&lista); break; case 2: printf("\n\t Inserir o valor: "); scanf("%d", &valor); inserirElementoFinal(&lista, valor); break; case 3: printf("\n\t Inserir o valor para pesquisar: "); scanf("%d", &valor); buscarElemento(&lista, valor); break; case 4: valor = removerElementoFinal(&lista); if(valor != (-1)) printf("\n\n\t O valor %d foi removido com sucesso!.\n", valor); break; default: if(op == 0) printf("\n\n\t Programa de Listas sequencial finalizado com sucesso.\n"); else printf("\n\n\t Opcao invalida! tente novamente."); break; } }while(op != 0); system("PAUSE"); return 0; }
Espero que tenha te ajudado, não esqueça de dar uma volta pelo blogger para veres mais conteúdos sobre o seu interesse.
Comentários
Enviar um comentário