Mudanças entre as edições de "AULA 21 - Programação 1 - Engenharia"

De MediaWiki do Campus São José
Ir para navegação Ir para pesquisar
(Criou página com '===Listas Ligadas=== Por vezes não se conhece o tamanho dos dados que se vai manipular e o uso de uma lista pode ser conveniente para armazená-los. Um sistema de estoque de pr...')
 
Linha 84: Linha 84:
 
* Implementar a função print_list
 
* Implementar a função print_list
 
* Implementar a função delete_node(int codigo)
 
* Implementar a função delete_node(int codigo)
 +
 +
Exercícios
 +
 +
Exercício 1
 +
 +
Considere um sistema de estoque de uma livraria representado por uma tabela conforme abaixo. Elabore as funções para adicionar, remover e listar um livro na/da tabela. Considere que uma entrada livre possui o ponteiro titulo igual a NULL.
 +
 +
<syntaxhighlight lang=c>
 +
#include <stdio.h>
 +
#define TAM 10
 +
 +
 +
struct tLivro {
 +
  char *titulo;
 +
  char *autor;
 +
  char *isbn;
 +
  float *preco;
 +
  int  estoque;
 +
};
 +
 +
 +
typedef struct tLivro TLivro;
 +
 +
TLivro Livros[10]; /* iniciar a tabela com NULL */
 +
 +
 +
 +
TLivro *retornar_entrada_livre()
 +
{
 +
}
 +
 +
int adicionar_livro()
 +
{
 +
char aux_isbn[20];
 +
TLivro *p;
 +
 +
/* Ler ISBN */
 +
if(verificar_livro_existe(aux_isbn)==1)
 +
    return 0;
 +
if((p=retornar_entrada_livre())==NULL)
 +
    return -1;
 +
 +
/* Ler os dados do livro pelo teclado e colocar na estrutura
 +
    apontada por p*/
 +
 +
}
 +
 +
/* retorna 0 se removido com sucesso e -1 caso contrário */
 +
int remover_livro(char *isbn)
 +
{
 +
}
 +
 +
void imprimir_dados_livro(char *isbn)
 +
{
 +
}
 +
 +
main()
 +
{
 +
/* testar as funções aqui */
 +
}
 +
</syntaxhighlight>
 +
 +
Exercício 2
 +
 +
Refazer o exercício anterior usando filas.
 +
 +
{{collapse bottom}}
 +
 +
{{collapse top | Mais exercícios}}
 +
 +
Exercício 1
 +
 +
Seja a seguinte estrutura:
 +
 +
<syntaxhighlight lang=c>
 +
struct tipo_carro {
 +
  char *marca;
 +
  char *modelo;
 +
  int  potencia;
 +
};
 +
 +
typedef tipo_carro tcarro;
 +
</syntaxhighlight>
 +
 +
 +
Implpementar as funções abaixo:
 +
 +
<syntaxhighlight lang=c>
 +
/* cria dinamicamente uma estrutura,
 +
  preenche os dados dos campos
 +
  e retorna um ponteiro para a estrutura criada
 +
  Retorna NULL caso não consiga alocar área
 +
*/
 +
tcarro *ler_carro()
 +
{
 +
}
 +
 +
/*
 +
  recebe dois ponteiros para estruturas do tipo carro e
 +
  retorna -1 caso pelo menos um dos ponteiros seja NULL,
 +
  retorna 0 se os modelos forem iguais
 +
  e retorna 1 se os modelos forem diferentes */
 +
int compara_modeloa(tcarro *p1, tcarro *p2)
 +
{
 +
}
 +
 +
/* libera a área da estrutura passada como parâmetro */
 +
void deleta_estrutura(tcarro *p)
 +
{
 +
}
 +
 +
main()
 +
{
 +
  /*testar as funções aqui */
 +
  /* criar dois carros */
 +
  /* comparar o modelo dos dois carros. Testar o retorno */
 +
  /* liberar a área das estruturas */
 +
}
 +
</syntaxhighlight>

Edição das 08h26min de 6 de novembro de 2014

Listas Ligadas

Por vezes não se conhece o tamanho dos dados que se vai manipular e o uso de uma lista pode ser conveniente para armazená-los. Um sistema de estoque de produtos, por exemplo, poderia ser armazenado na forma de uma lista. O exercício a seguir explora esta estrutura.

Exercício de lista ligada

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

/*========================*/
/** OPERAÇÔES COM LISTA LIGADA ******/
/*========================*/

/*
   tipos e variáveis globais
*/

struct TProduto{
   int codigo;
  struct TProduto *next;
} *head, *tail;


/*
   adiciona item a cabeça da lista
   retorna 0 se tudo ok e -1 se erro
*/
int add_nodo_head(int codigo)
{

}

/*
   adiciona item ao final  lista
   retorna 0 se tudo ok e -1 se erro
*/
int add_nodo_tail(int codigo)
{
   struct TProduto *p =  malloc (sizeof(struct TProduto));
   if (!p)
        return -1;

   p->codigo = codigo;
   p->next = NULL;

   if (tail==NULL) {
      /* lista vazia */
      tail = head = p;
   }else {
     /*lista não vazia */
       tail->next = p;
       tail = p;
   }
   return 0;
}

/*
   imprimir lista 
*/

void print_list()
{

}
 
main()
{
  int i;

  head = tail = NULL;
  print_list ();
  for (i=0;i<5;i++)
     add_nodo_tail(i);

  print_list ();
}

Lição para casa

  • Implementar a função add_node_head()
  • Implementar a função print_list
  • Implementar a função delete_node(int codigo)

Exercícios

Exercício 1

Considere um sistema de estoque de uma livraria representado por uma tabela conforme abaixo. Elabore as funções para adicionar, remover e listar um livro na/da tabela. Considere que uma entrada livre possui o ponteiro titulo igual a NULL.

#include <stdio.h>
#define TAM 10
 
 
struct tLivro {
  char *titulo;
  char *autor;
  char *isbn;
  float *preco;
  int  estoque;
};
 
 
typedef struct tLivro TLivro;
 
TLivro Livros[10]; /* iniciar a tabela com NULL */
 
 
 
TLivro *retornar_entrada_livre()
{
}
 
int adicionar_livro()
{
 char aux_isbn[20];
 TLivro *p;

 /* Ler ISBN */
 if(verificar_livro_existe(aux_isbn)==1)
    return 0;
 if((p=retornar_entrada_livre())==NULL)
    return -1;
 
 /* Ler os dados do livro pelo teclado e colocar na estrutura 
    apontada por p*/
 
}
 
/* retorna 0 se removido com sucesso e -1 caso contrário */
int remover_livro(char *isbn)
{
}
 
void imprimir_dados_livro(char *isbn)
{
}
 
main()
{
 /* testar as funções aqui */
}

Exercício 2

Refazer o exercício anterior usando filas.

|}

Mais exercícios

Exercício 1

Seja a seguinte estrutura:

struct tipo_carro {
   char *marca;
   char *modelo;
   int  potencia;
};

typedef tipo_carro tcarro;


Implpementar as funções abaixo:

/* cria dinamicamente uma estrutura,
   preenche os dados dos campos
   e retorna um ponteiro para a estrutura criada
   Retorna NULL caso não consiga alocar área
 */
tcarro *ler_carro()
{
}

/*
  recebe dois ponteiros para estruturas do tipo carro e
  retorna -1 caso pelo menos um dos ponteiros seja NULL,
  retorna 0 se os modelos forem iguais
  e retorna 1 se os modelos forem diferentes */
int compara_modeloa(tcarro *p1, tcarro *p2)
{
}

/* libera a área da estrutura passada como parâmetro */
void deleta_estrutura(tcarro *p)
{
}

main()
{
  /*testar as funções aqui */
  /* criar dois carros */
  /* comparar o modelo dos dois carros. Testar o retorno */
  /* liberar a área das estruturas */
}