#include <stdio.h>
#include <stdlib.h>
#include "tad-lista.h"
int main(int argc, char *argv[])
{
TipoLista lista, pares, impares;
TipoItem item;
int i = 0;
int a[] = {2,5,6,7,8,9,11,12,15,16,17};
int tam = 11;
int capacidade = 10;
// 1) Criar a lista
CriarLista(&lista, capacidade);
CriarLista(&pares, capacidade);
CriarLista(&impares, capacidade);
// 2) Imprimir a lista
ImprimirLista(lista);
// 3) inserir os elementos
for (i = 0; i < tam; i++)
{ item.Chave = a[i];
InserirLista(&lista, item);
// 4) Imprimir a lista
ImprimirLista(lista);
}
// 5) Pesquisar a lista
item.Chave = 5;
i = PesquisarLista(lista, item);
printf("Resultado pesquisa %d: %d\n",
item.Chave, i);
item.Chave = 3;
i = PesquisarLista(lista, item);
printf("Resultado pesquisa %d: %d\n",
item.Chave, i);
// 6) Retirar alguns elementos da lista
for (i = 0; i < capacidade; i++)
{
RetirarLista(&lista, &item);
printf("Retirado da lista: %d\n",
item.Chave);
// 7) imprimir a lista
ImprimirLista(lista);
//8) testar se numero eh par ou impar
if (item.Chave % 2 == 0)
{ InserirLista(&pares, item);
} else {
InserirLista(&impares, item);
}
}
printf("Pares: \n");
ImprimirLista(pares);
printf("Impares: \n");
ImprimirLista(impares);
system("PAUSE");
return 0;
}
sábado, 9 de novembro de 2013
2013/2-AED-TAD Lista Programa Principal E TAD Lista H
// TAD LISTA
// Tipos de dados
typedef int TipoChave;
struct T_Item{
TipoChave Chave;
};
typedef struct T_Item TipoItem;
typedef struct T_Celula * TipoApontador;
struct T_Celula{
TipoItem Item;
TipoApontador Prox;
};
typedef struct T_Celula TipoCelula;
struct T_Lista{
int Tamanho;
int Capacidade;
TipoApontador Primeiro, Ultimo;
};
typedef struct T_Lista TipoLista;
// Cabeçalho das operações
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item);
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item);
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item);
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
void CriarLista(TipoLista * Lista, int capacidade);
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
// Implementação das operações
void CriarLista(TipoLista * Lista, int capacidade){
// 1) criar a celula cabeça
Lista->Primeiro = (TipoApontador) malloc(
sizeof( TipoCelula));
// 2) atualizar os apontadores Prim. e Ult.
Lista->Ultimo = Lista->Primeiro;
// 3) atualizar o tamanho (zero) e capacidade (parametro)
Lista->Tamanho = 0;
Lista->Capacidade = capacidade;
// 4) atualizar o apontador prox da celula cabeca
Lista->Primeiro->Prox = NULL;
}
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item)
{
//1 ) verificar se LISTA estah cheia
if (ListaCheia(*Lista) == 1){
printf("ERRO: lista cheia!\n");return;
}
//2 ) criar nova celula a partir da ultima celula
Lista->Ultimo->Prox = (TipoApontador)
malloc(sizeof(TipoCelula));
//3 ) inserir a chave na celula
Lista->Ultimo->Prox->Item = item;
//4 ) atualizar apontadores (prim e ult.)
Lista->Ultimo = Lista->Ultimo->Prox;
Lista->Ultimo->Prox = NULL;
//5 ) atualizar tamanho
Lista->Tamanho++;
}
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item)
{
TipoApontador aux, q;
//1) verificar se LISTA estah vazia
if(ListaVazia(*Lista) == 1){
printf("ERRO: lista vazia");return;
}
//2) guardar a celula anterior (aux)
aux = Lista->Primeiro;
//3) guardar a celula a ser removida (q)
q = aux->Prox;
//4) atualizar a celula anterior
aux->Prox = q->Prox;
//5) obter o item removido
*item = q->Item;
//6) liberar o espaco de memoria de q
free(q);
//7) decrementar tamanho
Lista->Tamanho--;
}
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item)
{
TipoApontador aux;
int i = 0;
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
//3) enquanto houver celula apos aux
while (aux->Prox != NULL &&
aux->Prox->Item.Chave != item.Chave){
//3.1) se a chave que estiver na celula apos aux
// for igual a chave procurada
//3.2) atualizar aux
aux = aux->Prox;
i++;
}
if (aux->Prox !=NULL){
// achei
printf("Elemento encontrado!\n");
} else {
// nao achei
printf("Elemento NAO encontrado!\n");
i = -1;
}
return i;
}
// verificar se estah cheia
int ListaCheia(TipoLista Lista){
if (Lista.Tamanho == Lista.Capacidade)
{ return 1; // lista cheia
} else {
return 0; //lista nao cheia
}
}
// verificar se estah vazia
int ListaVazia(TipoLista Lista)
{
if (Lista.Primeiro == Lista.Ultimo)
{ return 1; // lista vazia
} else {
return 0; // lista nao vazia
}
}
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista){
return Lista.Tamanho;
}
// imprimir a lista
void ImprimirLista(TipoLista Lista)
{
TipoApontador aux;
printf("TAD Lista [%d/%d]\n",
Lista.Tamanho, Lista.Capacidade);
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
printf(" [/]-> ");
//3) enquanto houver celula apos aux
while (aux->Prox != NULL){
//3.2) atualizar aux
printf("[%d]-> ", aux->Prox->Item.Chave);
aux = aux->Prox;
}
printf("NULL\n\n");
}
#include <stdio.h>
#include <stdlib.h>
#include "tad-lista.h"
int main(int argc, char *argv[])
{
TipoLista lista;
TipoItem item;
int i = 0;
int a[] = {2, 5, 6, 7, 8, 9, 11};
int tam = 7;
int capacidade = 10;
// 1) Criar a lista
CriarLista(&lista, capacidade);
// 2) Imprimir a lista
ImprimirLista(lista);
// 3) inserir os elementos
for (i = 0; i < tam; i++)
{ item.Chave = a[i];
InserirLista(&lista, item);
// 4) Imprimir a lista
ImprimirLista(lista);
}
// 5) Pesquisar a lista
item.Chave = 5;
i = PesquisarLista(lista, item);
printf("Resultado pesquisa %d: %d\n",
item.Chave, i);
item.Chave = 3;
i = PesquisarLista(lista, item);
printf("Resultado pesquisa %d: %d\n",
item.Chave, i);
// 6) Retirar alguns elementos da lista
for (i = 0; i < tam; i++)
{
RetirarLista(&lista, &item);
printf("Retirado da lista: %d\n",
item.Chave);
// 7) imprimir a lista
ImprimirLista(lista);
}
system("PAUSE");
return 0;
}
// Tipos de dados
typedef int TipoChave;
struct T_Item{
TipoChave Chave;
};
typedef struct T_Item TipoItem;
typedef struct T_Celula * TipoApontador;
struct T_Celula{
TipoItem Item;
TipoApontador Prox;
};
typedef struct T_Celula TipoCelula;
struct T_Lista{
int Tamanho;
int Capacidade;
TipoApontador Primeiro, Ultimo;
};
typedef struct T_Lista TipoLista;
// Cabeçalho das operações
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item);
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item);
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item);
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
void CriarLista(TipoLista * Lista, int capacidade);
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
// Implementação das operações
void CriarLista(TipoLista * Lista, int capacidade){
// 1) criar a celula cabeça
Lista->Primeiro = (TipoApontador) malloc(
sizeof( TipoCelula));
// 2) atualizar os apontadores Prim. e Ult.
Lista->Ultimo = Lista->Primeiro;
// 3) atualizar o tamanho (zero) e capacidade (parametro)
Lista->Tamanho = 0;
Lista->Capacidade = capacidade;
// 4) atualizar o apontador prox da celula cabeca
Lista->Primeiro->Prox = NULL;
}
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item)
{
//1 ) verificar se LISTA estah cheia
if (ListaCheia(*Lista) == 1){
printf("ERRO: lista cheia!\n");return;
}
//2 ) criar nova celula a partir da ultima celula
Lista->Ultimo->Prox = (TipoApontador)
malloc(sizeof(TipoCelula));
//3 ) inserir a chave na celula
Lista->Ultimo->Prox->Item = item;
//4 ) atualizar apontadores (prim e ult.)
Lista->Ultimo = Lista->Ultimo->Prox;
Lista->Ultimo->Prox = NULL;
//5 ) atualizar tamanho
Lista->Tamanho++;
}
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item)
{
TipoApontador aux, q;
//1) verificar se LISTA estah vazia
if(ListaVazia(*Lista) == 1){
printf("ERRO: lista vazia");return;
}
//2) guardar a celula anterior (aux)
aux = Lista->Primeiro;
//3) guardar a celula a ser removida (q)
q = aux->Prox;
//4) atualizar a celula anterior
aux->Prox = q->Prox;
//5) obter o item removido
*item = q->Item;
//6) liberar o espaco de memoria de q
free(q);
//7) decrementar tamanho
Lista->Tamanho--;
}
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item)
{
TipoApontador aux;
int i = 0;
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
//3) enquanto houver celula apos aux
while (aux->Prox != NULL &&
aux->Prox->Item.Chave != item.Chave){
//3.1) se a chave que estiver na celula apos aux
// for igual a chave procurada
//3.2) atualizar aux
aux = aux->Prox;
i++;
}
if (aux->Prox !=NULL){
// achei
printf("Elemento encontrado!\n");
} else {
// nao achei
printf("Elemento NAO encontrado!\n");
i = -1;
}
return i;
}
// verificar se estah cheia
int ListaCheia(TipoLista Lista){
if (Lista.Tamanho == Lista.Capacidade)
{ return 1; // lista cheia
} else {
return 0; //lista nao cheia
}
}
// verificar se estah vazia
int ListaVazia(TipoLista Lista)
{
if (Lista.Primeiro == Lista.Ultimo)
{ return 1; // lista vazia
} else {
return 0; // lista nao vazia
}
}
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista){
return Lista.Tamanho;
}
// imprimir a lista
void ImprimirLista(TipoLista Lista)
{
TipoApontador aux;
printf("TAD Lista [%d/%d]\n",
Lista.Tamanho, Lista.Capacidade);
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
printf(" [/]-> ");
//3) enquanto houver celula apos aux
while (aux->Prox != NULL){
//3.2) atualizar aux
printf("[%d]-> ", aux->Prox->Item.Chave);
aux = aux->Prox;
}
printf("NULL\n\n");
}
#include <stdio.h>
#include <stdlib.h>
#include "tad-lista.h"
int main(int argc, char *argv[])
{
TipoLista lista;
TipoItem item;
int i = 0;
int a[] = {2, 5, 6, 7, 8, 9, 11};
int tam = 7;
int capacidade = 10;
// 1) Criar a lista
CriarLista(&lista, capacidade);
// 2) Imprimir a lista
ImprimirLista(lista);
// 3) inserir os elementos
for (i = 0; i < tam; i++)
{ item.Chave = a[i];
InserirLista(&lista, item);
// 4) Imprimir a lista
ImprimirLista(lista);
}
// 5) Pesquisar a lista
item.Chave = 5;
i = PesquisarLista(lista, item);
printf("Resultado pesquisa %d: %d\n",
item.Chave, i);
item.Chave = 3;
i = PesquisarLista(lista, item);
printf("Resultado pesquisa %d: %d\n",
item.Chave, i);
// 6) Retirar alguns elementos da lista
for (i = 0; i < tam; i++)
{
RetirarLista(&lista, &item);
printf("Retirado da lista: %d\n",
item.Chave);
// 7) imprimir a lista
ImprimirLista(lista);
}
system("PAUSE");
return 0;
}
2013/2-AED-TAD Lista Arquivo .H
// TAD LISTA
// Tipos de dados
typedef int TipoChave;
struct T_Item{
TipoChave Chave;
};
typedef struct T_Item TipoItem;
typedef struct T_Celula * TipoApontador;
struct T_Celula{
TipoItem Item;
TipoApontador Prox;
};
typedef struct T_Celula TipoCelula;
struct T_Lista{
int Tamanho;
int Capacidade;
TipoApontador Primeiro, Ultimo;
};
typedef struct T_Lista TipoLista;
// Cabeçalho das operações
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item);
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item);
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item);
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
void CriarLista(TipoLista * Lista, int capacidade);
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
// Implementação das operações
void CriarLista(TipoLista * Lista, int capacidade){
// 1) criar a celula cabeça
Lista->Primeiro = (TipoApontador) malloc(
sizeof( TipoCelula));
// 2) atualizar os apontadores Prim. e Ult.
Lista->Ultimo = Lista->Primeiro;
// 3) atualizar o tamanho (zero) e capacidade (parametro)
Lista->Tamanho = 0;
Lista->Capacidade = capacidade;
// 4) atualizar o apontador prox da celula cabeca
Lista->Primeiro->Prox = NULL;
}
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item)
{
//1 ) verificar se LISTA estah cheia
if (ListaCheia(*Lista) == 1){
printf("ERRO: lista cheia!\n");return;
}
//2 ) criar nova celula a partir da ultima celula
Lista->Ultimo->Prox = (TipoApontador)
malloc(sizeof(TipoCelula));
//3 ) inserir a chave na celula
Lista->Ultimo->Prox->Item = item;
//4 ) atualizar apontadores (prim e ult.)
Lista->Ultimo = Lista->Ultimo->Prox;
Lista->Ultimo->Prox = NULL;
//5 ) atualizar tamanho
Lista->Tamanho++;
}
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item)
{
TipoApontador aux, q;
//1) verificar se LISTA estah vazia
if(ListaVazia(*Lista) == 1){
printf("ERRO: lista vazia");return;
}
//2) guardar a celula anterior (aux)
aux = Lista->Primeiro;
//3) guardar a celula a ser removida (q)
q = aux->Prox;
//4) atualizar a celula anterior
aux->Prox = q->Prox;
//5) obter o item removido
*item = q->Item;
//6) liberar o espaco de memoria de q
free(q);
//7) decrementar tamanho
Lista->Tamanho--;
}
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item)
{
TipoApontador aux;
int i = -1;
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
//3) enquanto houver celula apos aux
while (aux->Prox != NULL &&
aux->Prox->Item.Chave != item.Chave){
//3.1) se a chave que estiver na celula apos aux
// for igual a chave procurada
//3.2) atualizar aux
aux = aux->Prox;
i++;
}
if (aux->Prox !=NULL){
// achei
printf("Elemento encontrado!\n");
} else {
// nao achei
printf("Elemento NAO encontrado!\n");
}
return i;
}
// verificar se estah cheia
int ListaCheia(TipoLista Lista){
if (Lista.Tamanho == Lista.Capacidade)
{ return 1; // lista cheia
} else {
return 0; //lista nao cheia
}
}
// verificar se estah vazia
int ListaVazia(TipoLista Lista)
{
if (Lista.Primeiro == Lista.Ultimo)
{ return 1; // lista vazia
} else {
return 0; // lista nao vazia
}
}
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista){
return Lista.Tamanho;
}
// imprimir a lista
void ImprimirLista(TipoLista Lista)
{
TipoApontador aux;
printf("TAD Lista [%d/%d]\n",
Lista.Tamanho, Lista.Capacidade);
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
//3) enquanto houver celula apos aux
while (aux->Prox != NULL){
//3.2) atualizar aux
printf("%d -> ", aux->Prox->Item.Chave);
aux = aux->Prox;
}
printf("\n\n");
}
// Tipos de dados
typedef int TipoChave;
struct T_Item{
TipoChave Chave;
};
typedef struct T_Item TipoItem;
typedef struct T_Celula * TipoApontador;
struct T_Celula{
TipoItem Item;
TipoApontador Prox;
};
typedef struct T_Celula TipoCelula;
struct T_Lista{
int Tamanho;
int Capacidade;
TipoApontador Primeiro, Ultimo;
};
typedef struct T_Lista TipoLista;
// Cabeçalho das operações
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item);
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item);
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item);
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
void CriarLista(TipoLista * Lista, int capacidade);
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
// Implementação das operações
void CriarLista(TipoLista * Lista, int capacidade){
// 1) criar a celula cabeça
Lista->Primeiro = (TipoApontador) malloc(
sizeof( TipoCelula));
// 2) atualizar os apontadores Prim. e Ult.
Lista->Ultimo = Lista->Primeiro;
// 3) atualizar o tamanho (zero) e capacidade (parametro)
Lista->Tamanho = 0;
Lista->Capacidade = capacidade;
// 4) atualizar o apontador prox da celula cabeca
Lista->Primeiro->Prox = NULL;
}
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item)
{
//1 ) verificar se LISTA estah cheia
if (ListaCheia(*Lista) == 1){
printf("ERRO: lista cheia!\n");return;
}
//2 ) criar nova celula a partir da ultima celula
Lista->Ultimo->Prox = (TipoApontador)
malloc(sizeof(TipoCelula));
//3 ) inserir a chave na celula
Lista->Ultimo->Prox->Item = item;
//4 ) atualizar apontadores (prim e ult.)
Lista->Ultimo = Lista->Ultimo->Prox;
Lista->Ultimo->Prox = NULL;
//5 ) atualizar tamanho
Lista->Tamanho++;
}
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item)
{
TipoApontador aux, q;
//1) verificar se LISTA estah vazia
if(ListaVazia(*Lista) == 1){
printf("ERRO: lista vazia");return;
}
//2) guardar a celula anterior (aux)
aux = Lista->Primeiro;
//3) guardar a celula a ser removida (q)
q = aux->Prox;
//4) atualizar a celula anterior
aux->Prox = q->Prox;
//5) obter o item removido
*item = q->Item;
//6) liberar o espaco de memoria de q
free(q);
//7) decrementar tamanho
Lista->Tamanho--;
}
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item)
{
TipoApontador aux;
int i = -1;
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
//3) enquanto houver celula apos aux
while (aux->Prox != NULL &&
aux->Prox->Item.Chave != item.Chave){
//3.1) se a chave que estiver na celula apos aux
// for igual a chave procurada
//3.2) atualizar aux
aux = aux->Prox;
i++;
}
if (aux->Prox !=NULL){
// achei
printf("Elemento encontrado!\n");
} else {
// nao achei
printf("Elemento NAO encontrado!\n");
}
return i;
}
// verificar se estah cheia
int ListaCheia(TipoLista Lista){
if (Lista.Tamanho == Lista.Capacidade)
{ return 1; // lista cheia
} else {
return 0; //lista nao cheia
}
}
// verificar se estah vazia
int ListaVazia(TipoLista Lista)
{
if (Lista.Primeiro == Lista.Ultimo)
{ return 1; // lista vazia
} else {
return 0; // lista nao vazia
}
}
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista){
return Lista.Tamanho;
}
// imprimir a lista
void ImprimirLista(TipoLista Lista)
{
TipoApontador aux;
printf("TAD Lista [%d/%d]\n",
Lista.Tamanho, Lista.Capacidade);
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
//3) enquanto houver celula apos aux
while (aux->Prox != NULL){
//3.2) atualizar aux
printf("%d -> ", aux->Prox->Item.Chave);
aux = aux->Prox;
}
printf("\n\n");
}
2013/2-AED-2013.11.07: TAD Lista - Código fonte em C
// TAD LISTA
// Tipos de dados
typedef int TipoChave;
struct T_Item{
TipoChave Chave;
};
typedef struct T_Item TipoItem;
typedef struct T_Celula * TipoApontador;
struct T_Celula{
TipoItem Item;
TipoApontador Prox;
};
typedef struct T_Celula TipoCelula;
struct T_Lista{
int Tamanho;
int Capacidade;
TipoApontador Primeiro, Ultimo;
};
typedef struct T_Lista TipoLista;
// Cabeçalho das operações
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item);
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item);
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item);
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
void CriarLista(TipoLista * Lista, int capacidade);
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
// Implementação das operações
void CriarLista(TipoLista * Lista, int capacidade){
// 1) criar a celula cabeça
Lista->Primeiro = (TipoApontador) malloc(
sizeof( TipoCelula));
// 2) atualizar os apontadores Prim. e Ult.
Lista->Ultimo = Lista->Primeiro;
// 3) atualizar o tamanho (zero) e capacidade (parametro)
Lista->Tamanho = 0;
Lista->Capacidade = capacidade;
// 4) atualizar o apontador prox da celula cabeca
Lista->Primeiro->Prox = null;
}
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item)
{
//1 ) verificar se LISTA estah cheia
if (ListaCheia(*Lista) == 1){
printf("ERRO: lista cheia!\n");return;
}
//2 ) criar nova celula a partir da ultima celula
Lista->Ultimo->Prox = (TipoApontador)
malloc(sizeof(TipoCelula));
//3 ) inserir a chave na celula
Lista->Ultimo->Prox->Item = item;
//4 ) atualizar apontadores (prim e ult.)
Lista->Ultimo = Lista->Ultimo->Prox;
Lista->Ultimo->Prox = null;
//5 ) atualizar tamanho
Lista->Tamanho++;
}
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item)
{
TipoApontador aux, q;
//1) verificar se LISTA estah vazia
if(ListaVazia(*Lista) == 1){
printf("ERRO: lista vazia");return;
}
//2) guardar a celula anterior (aux)
aux = Lista->Primeiro;
//3) guardar a celula a ser removida (q)
q = aux->Prox;
//4) atualizar a celula anterior
aux->Prox = q->Prox;
//5) obter o item removido
*item = q->Item;
//6) liberar o espaco de memoria de q
free(q);
//7) decrementar tamanho
Lista->Tamanho--;
}
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item)
{
TipoApontador aux;
int i = -1;
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
//3) enquanto houver celula apos aux
while (aux->Prox != null &&
aux->Prox->Item != item){
//3.1) se a chave que estiver na celula apos aux
// for igual a chave procurada
//3.2) atualizar aux
aux = aux->Prox;
i++;
}
if (aux->Prox !=null){
// achei
printf("Elemento encontrado!\n");
} else {
// nao achei
printf("Elemento NAO encontrado!\n");
}
return i;
}
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item)
{
}
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
// Tipos de dados
typedef int TipoChave;
struct T_Item{
TipoChave Chave;
};
typedef struct T_Item TipoItem;
typedef struct T_Celula * TipoApontador;
struct T_Celula{
TipoItem Item;
TipoApontador Prox;
};
typedef struct T_Celula TipoCelula;
struct T_Lista{
int Tamanho;
int Capacidade;
TipoApontador Primeiro, Ultimo;
};
typedef struct T_Lista TipoLista;
// Cabeçalho das operações
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item);
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item);
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item);
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
void CriarLista(TipoLista * Lista, int capacidade);
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
// Implementação das operações
void CriarLista(TipoLista * Lista, int capacidade){
// 1) criar a celula cabeça
Lista->Primeiro = (TipoApontador) malloc(
sizeof( TipoCelula));
// 2) atualizar os apontadores Prim. e Ult.
Lista->Ultimo = Lista->Primeiro;
// 3) atualizar o tamanho (zero) e capacidade (parametro)
Lista->Tamanho = 0;
Lista->Capacidade = capacidade;
// 4) atualizar o apontador prox da celula cabeca
Lista->Primeiro->Prox = null;
}
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item)
{
//1 ) verificar se LISTA estah cheia
if (ListaCheia(*Lista) == 1){
printf("ERRO: lista cheia!\n");return;
}
//2 ) criar nova celula a partir da ultima celula
Lista->Ultimo->Prox = (TipoApontador)
malloc(sizeof(TipoCelula));
//3 ) inserir a chave na celula
Lista->Ultimo->Prox->Item = item;
//4 ) atualizar apontadores (prim e ult.)
Lista->Ultimo = Lista->Ultimo->Prox;
Lista->Ultimo->Prox = null;
//5 ) atualizar tamanho
Lista->Tamanho++;
}
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item)
{
TipoApontador aux, q;
//1) verificar se LISTA estah vazia
if(ListaVazia(*Lista) == 1){
printf("ERRO: lista vazia");return;
}
//2) guardar a celula anterior (aux)
aux = Lista->Primeiro;
//3) guardar a celula a ser removida (q)
q = aux->Prox;
//4) atualizar a celula anterior
aux->Prox = q->Prox;
//5) obter o item removido
*item = q->Item;
//6) liberar o espaco de memoria de q
free(q);
//7) decrementar tamanho
Lista->Tamanho--;
}
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item)
{
TipoApontador aux;
int i = -1;
//1) verificar se LISTA estah vazia
if (ListaVazia(Lista) == 1){
printf("ERRO: lista vazia!\n");return;
}
//2) inicializar o apontador aux
aux = Lista.Primeiro;
//3) enquanto houver celula apos aux
while (aux->Prox != null &&
aux->Prox->Item != item){
//3.1) se a chave que estiver na celula apos aux
// for igual a chave procurada
//3.2) atualizar aux
aux = aux->Prox;
i++;
}
if (aux->Prox !=null){
// achei
printf("Elemento encontrado!\n");
} else {
// nao achei
printf("Elemento NAO encontrado!\n");
}
return i;
}
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item)
{
}
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
quinta-feira, 7 de novembro de 2013
2013/2-AED-2013.11.01: TAD Lista - Código Fonte em C
// TAD LISTA
// Tipos de dados
typedef int TipoChave;
struct T_Item{
TipoChave Chave;
};
typedef struct T_Item TipoItem;
typedef struct T_Celula * TipoApontador;
struct T_Celula{
TipoItem Item;
TipoApontador Prox;
};
typedef struct T_Celula TipoCelula;
struct T_Lista{
int Tamanho;
int Capacidade;
TipoApontador Primeiro, Ultimo;
};
typedef struct T_Lista TipoLista;
// Cabeçalho das operações
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item);
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item);
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item);
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
void CriarLista(TipoLista * Lista, int capacidade);
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
// Implementação das operações
void CriarLista(TipoLista * Lista, int capacidade){
// 1) criar a celula cabeça
Lista->Primeiro = (TipoApontador) malloc(
sizeof( TipoCelula));
// 2) atualizar os apontadores Prim. e Ult.
Lista->Ultimo = Lista->Primeiro;
// 3) atualizar o tamanho (zero) e capacidade (parametro)
Lista->Tamanho = 0;
Lista->Capacidade = capacidade;
// 4) atualizar o apontador prox da celula cabeca
Lista->Primeiro->Prox = null;
}
// Tipos de dados
typedef int TipoChave;
struct T_Item{
TipoChave Chave;
};
typedef struct T_Item TipoItem;
typedef struct T_Celula * TipoApontador;
struct T_Celula{
TipoItem Item;
TipoApontador Prox;
};
typedef struct T_Celula TipoCelula;
struct T_Lista{
int Tamanho;
int Capacidade;
TipoApontador Primeiro, Ultimo;
};
typedef struct T_Lista TipoLista;
// Cabeçalho das operações
// inserir uma chave na lista
void InserirLista(TipoLista * Lista, TipoItem item);
// retirar uma chave da lista
void RetirarLista(TipoLista * Lista, TipoItem * item);
// pesquisar por uma chave na lista
int PesquisarLista(TipoLista Lista, TipoItem item);
// verificar se estah cheia
int ListaCheia(TipoLista Lista);
// verificar se estah vazia
int ListaVazia(TipoLista Lista);
// criar uma nova lista
void CriarLista(TipoLista * Lista, int capacidade);
// obter o tamanho da lista
int TamanhoLista(TipoLista Lista);
// imprimir a lista
void ImprimirLista(TipoLista Lista);
// Implementação das operações
void CriarLista(TipoLista * Lista, int capacidade){
// 1) criar a celula cabeça
Lista->Primeiro = (TipoApontador) malloc(
sizeof( TipoCelula));
// 2) atualizar os apontadores Prim. e Ult.
Lista->Ultimo = Lista->Primeiro;
// 3) atualizar o tamanho (zero) e capacidade (parametro)
Lista->Tamanho = 0;
Lista->Capacidade = capacidade;
// 4) atualizar o apontador prox da celula cabeca
Lista->Primeiro->Prox = null;
}
Assinar:
Comentários (Atom)