Eis a lista baseada em vetor, com ordenação Bolha (Bubblesort) pós preenchimento da lista:
#include <stdio.h>
#include <stdlib.h>
#define QTD 100
//Powered by Cleórbete Santos
typedef struct sLivro{
 char titulo[50];
 char autor[50];
 char editora[50];
 int proximo;
}livro;
typedef struct sLista{
 livro livros[QTD];
 int inicio;
 int fim;
 int branco;
}lista;
void inicializa(lista* lista){
 int i;
 lista->inicio=-1;
 lista->fim=-1;
 lista->branco=0;
 for (i=0;i<=QTD;i++)
  lista->livros[i].proximo=i+1;
 lista->livros[QTD].proximo=-1;
}
int lista_vazia(lista* lista){
 return lista->inicio==lista->fim;
}
int lista_cheia(lista* lista){
 return lista->branco==-1;
}
void imprimir(lista* livro){
 int i=0;    
 for(i;i<livro->inicio;i++){ 
  printf("\n%d Titulo: %s\tAutor: %s\tEditora: %s",i+1,livro->livros[i].titulo,livro->livros[i].autor,livro->livros[i].editora);
  if(!(i%23) && i>0){
   printf("\nLimite de 23 livros alcancado. Continuando a listar.");
   getch();
  }
 }
}
void inserir(lista* livro){     
 if(lista_vazia(livro))
  livro->inicio=0;
 fflush(stdin);
 printf("Titulo: ");
 scanf("%s",&livro->livros[livro->inicio].titulo);
 fflush(stdin);
 printf("Autor: ");
 scanf("%s",&livro->livros[livro->inicio].autor);
 printf("Editora: ");
 scanf("%s",&livro->livros[livro->inicio].editora);
 livro->inicio=livro->inicio+1;
 if(livro->inicio==QTD)
  livro->branco=-1;
}
void buscar(lista *livro){
 int i, teste=-1; char nome[50];
 fflush(stdin);
 printf("\nInforme o titulo do livro: ");
 scanf("%s",&nome);
 for(i=0;(teste=strcmp(livro->livros[i].titulo,nome)!=0) && i<QTD;i++);
  if(!teste){
   system("cls");
   printf("Livro encontrado.");
   getch();
 }else{
  system("cls");
  printf("\nLivro nao encontrado.");
  getch();
 }
}
void excluir(lista *livro){
 int i, teste=-1; char nome[50];
 fflush(stdin);
 printf("\nInforme o titulo do livro: ");
 scanf("%s",&nome);
 for(i=0;(teste=strcmp(livro->livros[i].titulo,nome)!=0) && i<QTD;i++);
  if(!teste){
   if(livro->inicio>1){
    for(i;i<QTD-1;i++)
     livro->livros[i]=livro->livros[i+1];
    for (i;i<QTD;i++)
     livro->livros[i].proximo=-1;
    livro->inicio--;
    livro->branco=0;
   }else
    inicializa(livro);
    system("cls");
    printf("Livro excluido com sucesso.");
    getch();    
  }else{
   printf("\nLivro nao encontrado.");
   getch();
  }
}
void bolha(lista *lista){   
 int i, j, Z;        
 if((Z=lista->inicio)>1){
  for(i=0;i<Z-1;i++){
   for(j=i+1;j<Z;j++){
    if(strcmp(lista->livros[i].titulo,lista->livros[j].titulo)==1){
     livro x = lista->livros[j];
     lista->livros[j] = lista->livros[i];
     lista->livros[i] = x;
    }     
   }                 
  }
  for(i=0;i<=QTD;i++)
   lista->livros[i].proximo = i+1;
  lista->livros[QTD].proximo = -1;
  printf("Livros ordenados. Escolha a opcao 2.");
 }else{
  printf("\nEncontrado somente 1 livro. Nao ha a necessidade de ordenacao.\n");
 }
}     
int menu(){
   int op;
   printf("LIVRARIA\n\n");
   printf("1- Inserir livro\n");
   printf("2- Buscar livro\n");
   printf("3- Listar livros\n");
   printf("4- Ordenar livros\n");
   printf("5- Remover livro\n");
   printf("0- Sair\n\n");
   printf("Digite sua opcao: ");
   scanf("%d", &op);
   return op;
}
main (){
 int op;
 lista list;
 inicializa(&list);
 enum{SAIR, INSERIR, BUSCAR, LISTAR, ORDENAR, EXCLUIR}; 
 for(;;){
  op=menu();
  switch(op){
   case INSERIR:
    system("cls");
    if(!lista_cheia(&list)){
     inserir(&list);
    }else{
     printf("\ntLista cheia.");
     getch();
    }
    system("cls");
    break;
   case BUSCAR:
    system("cls");
    if(!lista_vazia(&list)){
     buscar(&list);
    }else{
     printf("\nLista vazia.");
     getch();
    }
    system("cls");    
    break;
   case LISTAR:
    system("cls");
    if(!lista_vazia(&list)){
     imprimir(&list);
     getch();
    }else{
     printf("\nLista vazia.");
     getch();
    }
    system("cls");
    break;
   case ORDENAR:
    system("cls");
    if(!lista_vazia(&list)){
     bolha(&list);     
     getch();
    }else{
     printf("\nLista vazia.");
     getch();
    }
    system("cls");
    break;
   case EXCLUIR:
    system("cls");
    if(!lista_vazia(&list))
     excluir(& list);
    else{
     printf("\nLista vazia.");
     getch();
    }
    system("cls");
    break;                
   case SAIR:
    printf("\nTchau!");
    getch();
    exit(1);
    break;
  }
 }
 getch();
}
Asta la...
 
Nenhum comentário:
Postar um comentário