Este material encontra-se em desenvolvimento, qualquer dúvida ou sugestão favor entrar em contato com o professor da disciplina.

Veja algumas dicas para esta disciplina.

Código Trocar.java, visto na primeira aula.

Exemplos em Java e C

Programa e comentários
Java
C
Saida
Hello World!
Note o uso da biblioteca stdio.h
HelloWorld.java HelloWorld.c saida.txt
Estrutura Simples
Note a definição de constantes através do comando #define.
Tanto linhas com #define ou #include NÃO terminam com ponto e vírgula.
Note o uso de dois comandos: typedef que pode ser utilizado assim: typedef int meuInt; e do comando struct que cria novas estruturas.
EstruturaSimples.java
pesoAltura.java
EstruturaSimples.c saida.txt
Bubble Sort
As funções em C precisam ser definidas (no código) antes de serem usadas (não podem ser definidas no final, por exemplo)
BubbleSort.java BubbleSort.c saida.txt
Swap2
Este programa tenta trocar o valor de duas variáveis sem receber o endereço das variáveis. Com é de se esperar, este programa NÃO funciona.
Note que nenhum dos programas funcionam pelo mesmo motivo (tanto em Java quanto em C).
Swap2.java Swap2.c saida.txt

Exemplos apenas em C

Programa e comentários
C
Entrada
Saida
Ponteiros1
Observe a alocação (malloc) e liberação (free) de memória e a inicialização do conteúdo da memória alocada.
Ponteiros1.c   saida.txt
Ponteiros2
Observe quando os valores das variáveis são copiados para dentro de funções ou quando o ponteiro (endereço) é copiado.
Ponteiros2.c   saida.txt
alocarLiberarMemoria
Este programa faz um teste interessante de ser acompanhado no gerenciador de tarefas de como a memória é alocada e é efetivamente usada pelo programa.
alocarLiberarMemoria.c    
Swap1
Este programa possui um método para trocar o valor de duas variáveis. Para isso, é necessária a passagem dos endereços das variáveis.
Swap1.c   saida.txt
Swap2
Este programa tenta trocar o valor de duas variáveis sem receber o endereço das variáveis. Com é de se esperar, este programa NÃO funciona.
Swap2.c   saida.txt
Swap3
Este programa troca o conteúdo apontado por duas váriaveis.
Swap3.c   saida.txt
Troca Variaveis
Este programa junta o conteúdo dos programas Swap1, Swap2 e Swap3.
trocarVariaveis.c   saida.txt
Exibir de maneira diferente um mesmo conteúdo
Este programa faz um teste interessante de como C pode interpretar de maneira diferente um mesmo conteúdo de memória.
conversao.c    
Arranjo
Este programa utiliza um arranjo simples em C (alocado dinamicamente).
arranjo.c    
Ordem dos métodos
Este programa usa um arquivo auxiliar de cabeçalho para permitir que dois métodos façam referência cruzada (o mesmo é necessário para recursões). Em C não é possível utilizar um método ou uma estrutura que ainda não foi definido/declarado.
OrdemDosMetodos.c
OrdemDosMetodos.h
   
leMatriz
Le uma matriz (através do console ou de um arquivo de entrada) e imprime seu conteúdo. Notem:
o uso do comando scanf: scanf("%d", &A[i][j]); (uso do &)
o modo de utilizar o arquivo de entrada: leMatriz.exe < matriz.txt
leMatriz.c matriz.txt saida.txt
Matriz Dinâmica
Le e aloca uma matriz (através do console ou de um arquivo de entrada) e imprime seu conteúdo. Notem:
o uso do comando scanf: scanf("%d", &A[i][j]); (uso do &)
o modo de utilizar o arquivo de entrada: MatrizDinamica.exe < matriz.txt
A matriz é alocada como um arranjo de arranjos.
MatrizDinamica.c matriz.txt saida.txt
Imprimir - uso de múltiplos arquivos em C
Apresenta um exemplo do uso de 3 arquivos em C: (i) um cabeçalho (exemploImprimir.h) com apenas a interface das funções, podendo conter a definição de constantes e estruturas; (ii) um arquivo (exemploImprimir.c) com a implementação das funções; e (iii) um arquivo que usa essas funções (testaImprimir.c).
Note que em C só é possível utilizar métodos já declarados, o que torna impossível o uso das funções; imprimirA e imprimirB sem um arquivo de cabeçalho (.h)
testaImprimir.c exemploImprimir.h exemploImprimir.c   saida.txt
Soma
Este programa chama a função soma para somar dois inteiros. A função soma recebe 3 parâmetros: os dois inteiros que serão somados e o endereço onde a resposta será colocada. Soma é uma função que não retorna nada (void), porém ela insere a soma dos dois inteiros na memória apontada pelo endereço de entrada.
Soma.c   saida.txt



Versão Alternativa das Estruturas de Dados

Estruturas de Dados da Ementa em C

Programa e comentários
C
Entrada
Saida
listaSequencial
gerencia uma estrutura de lista sequencial (utilizando um arranjo de MAX elementos do tipo REGISTRO e um contador de elementos [nroElem]).
listaSequencial.c
usaListaSequencialInterativo.c
entrada1.txt saida1.txt
listaLigada - implementação estática
gerencia uma estrutura de lista ligada (utilizando um arranjo de MAX elementos do tipo REGISTRO, um marcador do primeiro elemento da lista e do primeiro elemento disponível; cada REGISTRO possui um ponteiro para o seguinte). Nesta implementação consideramos que os elementos serão inseridos em ordem crescente, de acordo com a chave.
listaLigada.c
usaListaLigadaInterativo.c
entrada1.txt saida1.txt
listaLigadaD - implementação dinâmica
gerencia uma estrutura de lista ligada (a estrutura LISTA é apenas um ponteiro para o primeiro elemento da lista, cada REGISTRO possui um ponteiro para o seguinte). Nesta implementação consideramos que os elementos serão inseridos em ordem crescente, de acordo com a chave.
listaLigadaD.c
usaListaLigadaInterativoD.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
FILA - implementada usando nossa Lista Ligada implementação dinâmica
gerencia uma estrutura de FILA usando nossa estrutura de lista ligada (a estrutura LISTA é apenas um ponteiro para o primeiro elemento da lista, cada REGISTRO possui um ponteiro para o seguinte). Numa fila todo elemento é inserido no final da fila e exclusões e consultas ocorrem apenas no primeiro elemento da fila.
filaEmLLD.c
listaLigadaD.c
usaFilaEmLLD.c
entrada.txt saida.txt
PILHA - implementada usando nossa Lista Ligada implementação dinâmica
gerencia uma estrutura de PILHA usando nossa estrutura de lista ligada (a estrutura LISTA é apenas um ponteiro para o primeiro elemento da lista, cada REGISTRO possui um ponteiro para o seguinte). Numa pilha todo elemento é inserido e/ou excluido no topo da pilha. Consultas ocorrem apenas no topo da pilha.
pilhaEmLLD.c
listaLigadaD.c
usaPilhaEmLLD.c
entrada.txt saida.txt
PILHA INVERTIDA - implementada usando nossa Lista Ligada implementação dinâmica
gerencia uma estrutura de PILHA usando nossa estrutura de lista ligada. Chamamos de pilha INVERTIDA porque o topo da pilha será colocado no início da lista (e o início da pilha será o ultímo elemento da lista). Numa pilha todo elemento é inserido e/ou excluido no topo da pilha. Consultas ocorrem apenas no topo da pilha.
pilhaInvertidaEmLLD.c
listaLigadaD.c
usaInvertidaPilhaEmLLD.c
entrada.txt saida.txt
ListaLigadaSentinela - implementação dinâmica
gerencia uma estrutura de lista ligada (a estrutura LISTA é apenas um ponteiro para o primeiro elemento da lista e um para um nó sentinela, cada REGISTRO possui um ponteiro para o seguinte). O nó sentinela (do tipo REGISTRO) estará sempre presente na lista, ficando no final da mesma. A existência deste nó otimiza a execução de algumas funções, tais como a busca sequencial.
listaLigadaSentinela.c
usaListaLigadaInterativoS.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
ListaLigadaCabecaCircular - implementação dinâmica
gerencia uma estrutura de lista ligada circular e com nó cabeça no início da lista (a estrutura LISTA é apenas um ponteiro para o nó cabeça, cada REGISTRO possui um ponteiro para o seguinte). A existência do nó cabeça otimiza a execução de algumas funções, tais como a busca sequencial.
listaLigadaCabCirc.c
usaListaLigadaInterativoCC.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
ListaDuplamenteLigadaCircularCabeca - implementação dinâmica
gerencia uma estrutura de lista DUPLAMENTE ligada circular e com nó cabeça no início da lista (a estrutura LISTA é apenas um ponteiro para o nó cabeça, cada REGISTRO possui dois ponteiros: um para o elemento seguinte e outro para o anterior). Esta estrutura é recomendada quando se necessita percorrer a lista nos dois sentidos.
listaDuplamenteLigadaCC.c
usaListaLigadaInterativoDCC.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
Fila - implementação estática
gerencia uma fila implementada em um arranjo de MAX elementos. A estrutura fila contem o arranjo e dois inteiros: inicio e fim.
filaEstatica.c
usaFilaEstatica.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
Fila - implementação estática
gerencia uma fila implementada em um arranjo de MAX elementos. A estrutura fila contem o arranjo e dois inteiros: inicio e numElementos.
filaEstatica.c
usaFilaEstatica.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
Fila - implementação dinâmica
gerencia uma fila (usando os conceitos de lista ligada). A estrutura FILA contém dois ponteiros: para o inicio e para o fim da fila (facilitando a inserção e remoção).
filaEstatica.c
usaFilaDinamica.c
entrada.txt saida.txt
Deque - implementação dinâmica
gerencia um deque (fila com duas entradas).
DequeDinamico.c
usaDequeDinamico.c
entrada.txt saida.txt
PilhaEstatica - implementação estática de uma pilha
pilhaEstatica.c
usaPilhaEstatica.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
PilhaDupla - implementação estática
gerencia uma estrutura que contém duas pilhas (uma em cada ponta)
duasPilhasEstaticas.c
usaDuasPilhasEstaticas.c
entrada.txt saida.txt
PILHA - implementação dinâmica
gerencia uma estrutura de PILHA usando uma estrutura ligada. Numa pilha todo elemento é inserido e/ou excluido no topo da pilha. Consultas ocorrem apenas no topo da pilha.
pilhaDinamica.c
usaPilhaDinamica.c
entrada.txt saida.txt
MatrizesEsparsasLinhas - matriz esparsa organizada como uma lista ligada com nó cabeça
esparsasLinhas.c
usaEsparsasLinhas.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
Multiplas Pilhas Estaticas
gerencia um arranjo que contem NP pilhas e que podem conter, ao todo, MAX elementos.
multiplasPilhasEstaticas.c
usaMultiplasPilhasEstaticas.c
entrada.txt saida.txt
MatrizDiagonalInferior - implementação dinâmica
gerencia uma matriz diagonal inferior.
matrizDiagonalInferior.c
usaMatrizDiagonalInferior.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
MatrizDiagonalSuperior - implementação dinâmica
gerencia uma matriz diagonal superior.
matrizDiagonalSuperior.c
usaMatrizDiagonalSuperior.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
MatrizTriangularInferior - implementação dinâmica
gerencia uma matriz triangular inferior.
matrizTriangularInferior.c
usaMatrizTriangularInferior.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
MatrizTriangularSuperior - implementação dinâmica
gerencia uma matriz triangular superior.
matrizTriangularSuperior.c
usaMatrizTriangularSuperior.c
entrada1.txt
entrada2.txt
saida1.txt
saida2.txt
ListaGeneralizada - implementação dinâmica
gerencia uma lista generalizada (a estrutura do nó utiliza o comando union).
listaGeneralizada.c
usaListaGeneralizada.c
  saida.txt
ArvoreEnaria1 - Este programa gerencia árvores n-árias (cada nó pode ter um número ilimitado de filhos). Esta estrutura usa uma lista ligada de filhos como estrutura auxiliar.. arvoreEnaria1.c   saida.txt
ArvoreEnaria2 - Este programa gerencia árvores n-árias (cada nó pode ter um número ilimitado de filhos). Cada nó possui dois ponteiros: um para seu último filho (o último que foi inserido) e um para o seu irmão a direita (o irmão que foi inserido antes dele). Essa lista de irmãos funciona como uma lista ligada. arvoreEnaria2.c   saida.txt
ArvoreBinaria - Este programa gerencia árvores binárias (cada nó pode ter dois filhos apontados pelos ponteiros esq e dir). arvoreBinaria.c   saida.txt
ArvoreDeBuscaBinaria - Este programa gerencia árvores de busca binárias. arvoreDeBuscaBinaria.c
usaArvoreDeBuscaBinaria.c
entrada.txt saida.txt
ArvoreDeBuscaBinaria2 - Este programa gerencia árvores de busca binárias. arvoreDeBuscaBinaria2.c
usaArvoreDeBuscaBinaria2.c
filaEmLLD.c
listaLigadaD.c
pilhaInvertidaEmLLD.c
entrada.txt saida.txt
ArvoreAVL - Este programa gerencia árvores de busca binárias balanceadas AVL.
Veja também algumas dicas sobre árvores AVL. Além disso, há uma segunda implementação no site que contém a exclusão AVL desevolvida pelo monitor da disciplina.
arvoreAVL.c
usaArvoreAVL.c
entrada.txt saida.txt
Heap - Este programa gerencia Heaps implementados em árvores binárias (implementação estática). A raiz do heap ficará na posição 1 do arranjo. heap.c   saida.txt
Heap2 - Este programa gerencia Heaps implementados em árvores binárias (implementação estática). A raiz do heap ficará na posição 0 (zero) do arranjo. heap2.c   saida.txt

Veja algumas dicas para esta disciplina.