Programa e comentários | |||
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 |
Programa e comentários | |||
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 |
Programa e comentários | |||
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 |