#include #include #include #include #include "representacaoPorLinha.h" using namespace std; void inicializa(MATRIZ* A) { A->primeiro = NULL; } // assume que A[i][j] != NULL int get(MATRIZ* A, int i, int j) { NO* atual = A->primeiro; while (atual != NULL && atual->i != i && atual->j != j){ atual = atual->prox; } assert(atual != NULL); return atual->info; } RESP_COMPARA compara(NO* no, int i, int j) { if(no->i == i && no->j == j) { return IGUAL; } if(no->i < i || (no->i == i && no->j < j)) { return MENOR; } return MAIOR; } bool vazia(MATRIZ* A) { return A->primeiro == NULL; } NO* novoNo(int i, int j, int info, NO* prox) { NO* no = (NO*) malloc(sizeof(NO)); no->prox = prox; no->i = i; no->j = j; no->info = info; return no; } void set(MATRIZ* A, int i, int j, int info) { // nova coordenada vai ser inserida na primeira posicao if(vazia(A) || compara(A->primeiro, i, j) == MAIOR){ NO* no = novoNo(i, j, info, A->primeiro); A->primeiro = no; return; } NO* ant = NULL; for(NO* no = A->primeiro; no != NULL; no = no->prox){ // altera info da coordena ja existente if(compara(no, i, j) == IGUAL){ no->info = info; return; } // nova coordenada inserida no "seu devido lugar" (ordenada) if(compara(no, i, j) == MAIOR) { NO* novo = novoNo(i, j, info, no); ant->prox = novo; return; } // nova coordenada vai ser inserida na ultima posicao if(no->prox == NULL){ NO* novo = novoNo(i, j, info, NULL); no->prox = novo; return; } ant = no; } } bool contains(MATRIZ* A, int i, int j) { for(NO* temp = A->primeiro; temp != NULL; temp = temp->prox){ if(compara(temp, i, j) == IGUAL){ return true; } } return false; } void imprime(MATRIZ* A) { for(NO* temp = A->primeiro; temp != NULL; temp = temp->prox){ cout << "A[" << temp->i << "][" << temp->j << "] = " << (char)temp->info << endl; } } int main() { MATRIZ A; inicializa(&A); set(&A, 6, 7, 'H'); set(&A, 3, 3, 'C'); set(&A, 2, 3, 'A'); set(&A, 2, 6, 'B'); set(&A, 6, 5, 'F'); set(&A, 6, 6, 'G'); set(&A, 4, 3, 'D'); set(&A, 5, 3, 'E'); imprime(&A); }