Encontrei nesses últimos dias a necessidade que algumas pessoas tinham em fazer estrutura de dados em C, e buscando nas anotações que fazia acabei encontrando algumas estruturas que podem ser muito úteis para quem está aprendendo ou tem alguma dúvida em como implementar. A primeira é uma lista estática desordenada criada para armazenar informações de uma lista de casamento, e a segunda é uma lista estática ordenada, criada para armazenar o rankig de competidores de olimpíadas. O melhor compilador C que conheço e é bem simples de usar é o DEV C, que pode ser baixado em qualquer site desses pela internet. Espero ter ajudado… Valeu!
/*
==================
Lista Desordenada
@ESA
==================
Estrutura {
inteiro codigo;
char nome[30];
inteiro qtAcompanhantes;
}
Criar os métodos inserir, alterar, consultar por codigo, excluir e calcular quantidade
total de convidados;
*/
/* Estrutura */
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
typedef struct lista_casamento{
int codigo_convidado;
char nome_convidado[30] ;
int qt_convidados;
} Tipo_Lista_casamento;
const int maximo= 50; /* Limite máximo de convidados*/
int qtd_convidados;
int escolha;
Tipo_Lista_casamento lista[50]; /* Vetor da Lista de Casamentos*/
/* Preenche Linha */
void imprimirLinha() {
int i;
for (i=1;i<=50;i++)
printf(“_”);
printf(“\n”);
}
/* Cabeçalho */
void imprimeCabecalho() {
system(“cls”);
printf(“Implementando Lista de Casamento\n”);
imprimirLinha();
}
/* Método de procura */
int procuraPorCodigoConvidado(int Cdconvidado) {
int i; /* Variável contador*/
int posicao;
posicao = -1;
for(i = 0; i<qtd_convidados; i++) {
/* retornar a posição do código informado*/
if (Cdconvidado==lista[i].codigo_convidado){
posicao = i;
break;
}
}
return posicao; /* retorna o número da posição*/
}
void mostre(int posicao) {
printf(“\n\nCodigo Nome Acompanhantes ”);
printf(“\n————————————————————–”);
printf(“\n%9d %-20s %9d ”,
lista[posicao].codigo_convidado,
lista[posicao].nome_convidado,
lista[posicao].qt_convidados);
printf(“\n—————————————————————”);
}
/* Método inserir */
void inserir(){
int op; /* Controla opção selecionada pelo usuário*/
do{
imprimeCabecalho();
printf(“\nInforme o Convidado\n\n”);
/* Máximo é a constante, limite de convidados*/
if (qtd_convidados<maximo){
printf(“\nCodigo do Convidado: “);
scanf(“%d”,&lista[qtd_convidados].codigo_convidado);
printf(“\nNome do Convidado: “);
fflush(stdin); /* Limpa o buffer do teclado*/
gets(lista[qtd_convidados].nome_convidado);
printf(“\nInforma a quantidade de Convidados que ira levar: “);
scanf(“%d”,&lista[qtd_convidados].qt_convidados);
qtd_convidados++;
printf(“\n\nConvidado Inserido com Sucesso!!!\n\n”);
}else /* Lista de Convidados cheia */{
printf(“\n\n\aLista de Casamentos Lotada!!!\n\n”);
getche();
break;
}
printf(“\n\nInserir outro convidado(1-sim/2-nao)? “);
scanf(“%d”,&op);
}while (op == 1); /* Enquanto usuário escolher 1 ficar repetindo*/
}
/* Consultar convidado por código*/
void consultarConvidado()
{ int i, codigoConsultar, achou, cont;
do
{ imprimeCabecalho();
printf(“\nInforme o codigo do convidado\n\n”);
printf(“\nCodigo: “);
scanf(“%d”,&codigoConsultar);
achou = procuraPorCodigoConvidado(codigoConsultar); /* Utiliza a função de procura*/
if (achou != -1)
mostre(achou); /* Código procurado, método declarado lá em cima*/
else // produto nao foi encontrado
printf(“\n\n\aTalvez o codigo esteja incorreto, informar novamente!!!!!!\n”);
printf(“\n\nConsultar outro convidado(1-sim/2-nao)? “);
scanf(“%d”,&cont);
} while (cont == 1);
}
// Remover Convidados
void remover()
{ int codigoRemover, i, cont, achou, confirmaRemocao;
do{
imprimeCabecalho();
printf(“\nRemover Convidado\n\n”);
printf(“\nCódigo do Convidado: “);
scanf(“%d”,&codigoRemover);
achou = procuraPorCodigoConvidado(codigoRemover);
if (achou != -1)
{
mostre(achou);
printf(“\nExcluir este convidado da Lista (1-sim/2-nao)? “);
scanf(“%d”,&confirmaRemocao);
if (confirmaRemocao==1) // verifica se quer remover
{
lista[achou] = lista[qtd_convidados];
qtd_convidados–;
printf(“\n\nConvidado banido da festa!!!\n”);
system(“pause”);
}else {
printf(“\n\n\aO convidado nao pode ser excluido!!!\n”);
system(“pause”);
break;
}
system(“pause”);
}
else // Convidado nao foi encontrado
printf(“\n\naTalvez o codigo informado esteja incorreto, informar outro\n”);
printf(“\n\nRemover outro(1-sim/2-nao)? “);
scanf(“%d”,&cont);
}while (cont == 1);
}
/* Lista os convidados*/
void listagem()
{ int i;
imprimeCabecalho();
printf(“\nLista de Convidados\n”);
printf(“\n\nCodigo Nome Acompanhantes ”);
printf(“\n————————————————————–”);
for(i = 0; i < qtd_convidados ; i++)
printf(“\n%9d %-20s %9d ”,
lista[i].codigo_convidado,
lista[i].nome_convidado,
lista[i].qt_convidados);
printf(“\n—————————————————————”);
printf(“\n\nDigite qualquer tecla para sair… “);
getche();
}
/* Dúvida*/
int main(int argc, char *argv[])
{
qtd_convidados =0;
do // tela com o menu do opcoes
{ imprimeCabecalho();
printf(“Opcoes:\n\n”);
printf(” 1- Inserir novo Convidado\n\n”);
printf(” 2- Listagem de Convidados\n\n”);
printf(” 3- Consulta convidado por codigo\n\n”);
printf(” 4- Remover convidado por codigo\n\n”);
printf(” 0- Sair do Programa\n”);
imprimirLinha();
printf(“\n Informe a Opcao desejada: “);
scanf(“%d”,&escolha); /* Declarado lá em cima*/
switch(escolha)
{ case 1: inserir(); break;
case 2: listagem(); break;
case 3: consultarConvidado(); break;
case 4: remover(); break;
case 0: break;
default : printf(“\n\a Opcao Invalida! Tecle enter…”);
getche(); break;
}
} while (escolha != 0); /* opção de saída*/
return 0;
}
/*
==================
Lista Ordenada
@ESA
==================
*/
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
/* const maximo = 8; */
typedef struct lista_posicoes{
int codigo_competidor;
char nome_competidor[30] ;
int tempo_segundos;
} Tolimpiada;
/* Declaração de Variáveis*/
int qtd_competidores;
int escolha;
Tolimpiada competidor; /* Declarando tipo competidor*/
Tolimpiada lista[50]; /* Vetor da Lista de Posições no Campeonato*/
int maximo = 8;
/* Preenche Linha */
void imprimirLinha() {
int i;
for (i=1;i<=50;i++)
printf(“_”);
printf(“\n”);
}
/* Cabeçalho */
void imprimeCabecalho() {
system(“cls”);
printf(“Posicoes Olimpiadas – Lista Ordenada\n”);
imprimirLinha();
}
/* Método de procura */
int procuraPorCodigoCompetidor(int Cdcompetidor) {
int i; /* Variável contador*/
int posicao;
posicao = -1;
for(i = 0; i<qtd_competidores; i++) {
/* retornar a posição do código informado*/
if (Cdcompetidor==lista[i].codigo_competidor){
posicao = i;
break;
}
}
return posicao; /* retorna o número da posição*/
}
void mostre(int posicao) {
printf(“\n\nCodigo Nome Competidor Posição no Ranking ”);
printf(“\n————————————————————–”);
printf(“\n%9d %-20s %9d ”,
lista[posicao].codigo_competidor,
lista[posicao].nome_competidor,
lista[posicao].tempo_segundos);
printf(“\n—————————————————————”);
}
/* Método para colocar em ordem */
void ColocarEmOrderm(){
int i, local;
local -1;
if (qtd_competidores==0)
lista[0]= competidor;
else
{ for (i=0;i<qtd_competidores;i++)
{ if (competidor.tempo_segundos < lista[i].tempo_segundos)
{ local = i;
break;
}
}
if (local==-1)
lista[qtd_competidores] = competidor;
else
{
for (i=qtd_competidores; i>local; i –)
lista[i]= lista[i -1];
lista[local]=competidor;
}
}
}
/* Método Inserir */
void Inserir()
{ int cont;
do { imprimeCabecalho();
printf(“\nInformar Competidor\n”);
if (qtd_competidores<maximo) //Verifica se a lista já está cheia
{ printf(“\nCodigo do Competidor: “);
scanf(“%d”,&competidor.codigo_competidor);
printf(“\nNome do Competidor: “);
fflush(stdin);
gets(competidor.nome_competidor);
printf(“\nTempo em Segundos: “);
scanf(“%f”,&competidor.tempo_segundos);
ColocarEmOrderm();
qtd_competidores++;
printf(“\n\nCompetidor cadastrado com Sucesso!!!\n”);
}
else // Vetor cheio
{
printf(“\n\nLimite máximo de competidores!\n”);
getche();
break;
}
printf(“\n\nContinuar Inserindo Competidores (1-sim/2-nao)?”);
scanf(“%d”,&cont);
}while(cont == 1);
}
/* Lista os convidados*/
void listagem()
{ int i;
imprimeCabecalho();
printf(“\nLista de Competidores\n”);
printf(“\n\nCodigo Nome TempoSegundos ”);
printf(“\n————————————————————–”);
for(i = 0; i < qtd_competidores ; i++)
printf(“\n%9d %-20s %9d ”,
lista[i].codigo_competidor,
lista[i].nome_competidor,
lista[i].tempo_segundos);
printf(“\n—————————————————————”);
printf(“\n\nDigite qualquer tecla para sair… “);
getche();
}
/* Implementando método de remoção */
/* competrem – atleta a ser removido */
void remover(){
int competrem, i, achou, continuar, conrem;
do{
imprimeCabecalho();
printf(“\nRemover Competidor do Campeonato\n\n”);
printf(“\nCódigo do Competidor:”);
scanf(“%d”,&competrem);
achou = procuraPorCodigoCompetidor(competrem);
if (achou!=-1)
{ mostre(achou);
printf(“\nDeseja remover o Competidor (1 – Sim/2 – Não)?”);
scanf(“%d”,&conrem);
if (conrem == 1)
{ for (i==achou;i<qtd_competidores;i++)
lista[i]=lista[i+1];
qtd_competidores–;
printf(“\n\nO competidor removido!!!\n”);
}
else
printf(“\n\n\aO competidor nao foi removido!!!\n”);
}
else
printf(“\n\n\aCodigo de competidor incorreto!\n”);
printf(“\n\n\aContinuar remover competidor (1-Sim/2-Não)?”);
scanf(“%d”,&continuar);
} while(continuar == 1);
}
/* Dúvida*/
int main(int argc, char *argv[])
{
qtd_competidores =0;
do // tela com o menu do opcoes
{ imprimeCabecalho();
printf(“Opcoes:\n\n”);
printf(” 1- Inserir novo Competidor\n\n”);
printf(” 2- Ranking dos Competidores\n\n”);
printf(” 3- Remover Competidores\n\n”);
printf(” 0- Sair do Programa\n”);
imprimirLinha();
printf(“\n Informe a Opcao desejada: “);
scanf(“%d”,&escolha); /* Declarado lá em cima*/
switch(escolha)
{ case 1: Inserir(); break;
case 2: listagem(); break;
case 0: break;
default : printf(“\n\a Opcao Invalida! Tecle enter…”);
getche(); break;
}
} while (escolha != 0); /* opção de saída*/
return 0;
}