void inserir(Digraph G, int v, int w) { link a; for (a = G->adj[v]; a != NULL; a = a->next) if (a->w == w) return; G->adj[v] = novoNo( w, G->adj[v]); G->A++; }
/* Seta valor de raiz */ void setaRaiz(PPNo raiz,int chave) { PNo novo; if(!*raiz) { novo = novoNo(chave); *raiz = novo; } }
int main(int argc, char *argv[]){ //Estruturas BuscaRetorno* r; Arvore* raiz; //Inicializacao da arvore resetActualTree(); raiz = initializeTree(); //Parametros char* nameEntrada = argv[1]; char* nameBusca = argv[2]; char* nameSaida = argv[3]; //Arquivo FILE *arq; FILE *write; char info[MAX_LENGHT_WORD]; // ==================== INSERINDO ========================= printf("Inserindo na arvore\n"); fopen_s(&arq,nameEntrada,"r"); if(arq == NULL) printf("Erro, nao foi possivel abrir o arquivo\n"); else while( (fgets(info, sizeof(info), arq))!=NULL ) raiz = adiciona(raiz,novoNo(info)); fclose(arq); //raiz = adiciona(raiz,novoNo("1")); // ==================== BUSCANDO ========================= printf("\nBUSCANDO\n"); fopen_s(&arq,nameBusca,"r"); if(arq == NULL) printf("Erro, nao foi possivel abrir o arquivo de leitura\n"); else{ fopen_s(&write,nameSaida,"w"); if(arq == NULL) printf("Erro, nao foi possivel abrir o arquivo de escrita\n"); else while( (fgets(info, sizeof(info), arq))!=NULL ){ r = busca(raiz,info); info[strlen(info)-1] = '\0'; if(encontrouNaBusca(r)) fprintf(write,"%s presente %d\n",info,profDaBusca(r)); else fprintf(write,"%s ausente %d\n",info,profDaBusca(r)); } } fclose(arq); fclose(write); }
/* Insere um novo valor na lista ligada. O último nó inserido será sempre o primeiro da lista (menor complexidade de inserção) */ void insereValor(PPNo inicio,int valor) { PNo novo; novo = novoNo(valor); /* aloca o novo nó */ novo->prox = *inicio; /* o ponteiro prox do novo nó passa a apontar para o antigo 1o elemento da lista */ *inicio = novo; /* o ponteiro que indica o inicio da lista passa a apontar para o novo nó */ }
// Função recursiva auxiliar a leEntrada void recLeEntrada (no **N) { char entrada[MAX]; scanf ("%s", entrada); *N = novoNo (entrada); // é operador, então lê seus operandos if (ehOperador (entrada)) { recLeEntrada (&(*N)->esquerdo); recLeEntrada (&(*N)->direito); } }
/* cria o nó inicio da nova matriz e retorna seu endereco */ PtrNo novaMatriz(int linhas, int cols) { PtrNo inicio; /* Alocando o No inicio */ inicio = novoNo(); inicio->linha = linhas; inicio->coluna = cols; inicio->prox_linha = inicio; inicio->prox_coluna = inicio; return inicio; }
int inserirOrdenado(Musica musica, No *head) { No *no = novoNo(); No *aux = head->prox; No *prev = NULL; no->musica = musica; /*procura posicao para insercao*/ while(aux != NULL && ( strcmp(aux->musica.titulo,musica.titulo) <= 0) ) { if( strcmp(aux->musica.titulo,musica.titulo) == 0) //if( isMusicaEqual(aux->musica, musica) == 1) { return 0; } prev = aux; aux = aux->prox; } if(head->prox == NULL)//lista vazia { head->prox = no; no->prev = NULL; return 1; } else if(aux == NULL)//pos fim { prev->prox = no; no->prev = prev; return 1; } else if(prev == NULL)//pos ini { head->prox = no; no->prev = NULL; no->prox = aux; return 1; } else//pos meio { prev->prox = no; no->prox = aux; no->prev = prev; return 1; } return-1; }
/* insere nó cabeca para a coluna/linha e retorna o endereco dessa nova cabeca */ PtrNo insereCabeca(PtrNo inicio, int linha, int coluna) { PtrNo aux, nova, aux2; /* nova aponta para o novo no cabeca; aux e aux2 sao usados para percorrer os nos cabecas ja criados */ /* Criando o novo no */ nova = novoNo(); nova->linha = linha; nova->coluna = coluna; nova->prox_coluna = nova; nova->prox_linha = nova; /* Se a coluna for -1, o nó cabeca a ser inserido é de uma linha */ if(coluna == -1) { aux = inicio->prox_linha; /* aux comeca apontando pra 1a linha da matriz */ aux2 = inicio; /* aux2 comeca apontando para inicio */ nova->prox_linha = inicio; while(aux != inicio && aux->linha < linha) { /* laco que percorre as linhas cabecas ate a posicao onde o novo no cabeca deve ficar */ aux2 = aux; /* aux2 vai apontar para o que deve apontar para nova */ aux = aux->prox_linha; /* aux vai apontar para o no que nova->prox_linha deve apontar */ } aux2->prox_linha = nova; /* aux2 aponta para nova */ nova->prox_linha = aux; /* nova aponta para aux */ return nova; } /* Se a linha for -1, o nó cabeça a ser inserido é uma coluna. */ /* A lógica para inserir um nó cabeça de coluna é mesma para um nó cabeça de linha */ if(linha == -1) { aux = inicio->prox_coluna; aux2 = inicio; nova->prox_coluna = inicio; while(aux != inicio && aux->coluna < coluna) { aux2 = aux; aux = aux->prox_coluna; } aux2->prox_coluna = nova; nova->prox_coluna = aux; return nova; } return NULL; }
void inserirNoFim(Musica musica, No *head) { //lista vazia if(head->prox == NULL) { No *no = novoNo(); no->musica = musica; head->prox = no; no->prev = head; } else { inserirNoFim(musica, head->prox); } }
/* Insere um novo nó */ void insereNo(PPNo raiz,int chave) { PNo novo, pai; novo = novoNo(chave); /* aloca memória para o novo nó */ pai = busca(*raiz,chave,NULL); /* busca endereço do pai do novo nó */ if(pai) { /* se o pai existe, adiciona novo nó como filho dele */ if(pai->chave == chave) { /* se a chave a ser inserida ja existe, mostra aviso na tela */ gotoxy(1,1); printf("Chave ja existe!\n"); }else { if(chave > pai->chave) pai->dir = novo; else pai->esq = novo; } } balanceamento(raiz); /* recalcula balanceamento da arvore */ }
void insere(listadupla *l, int x) { no *pont, *anterior, *pt, *ptlista; ptlista = l->cab; pont = busca_dup(l, x); if (pont == ptlista || pont->chave != x) { anterior = pont->ant; pt = novoNo(); pt->chave = x; pt->ant = anterior; pt->post = pont; anterior->post = pt; pont->ant = pt; } }
void inseriNoInicio(Musica musica, No *head) { No *no = novoNo(); no->musica = musica; No *aux; aux = NULL; //lista vazia if(head->prox == NULL) { head->prox = no; } else { aux=head->prox; head->prox = no; no->prox = aux; no->prev = NULL; } }
/* insere novo valor na matriz */ int insereCasa(PtrNo inicio, int linha, int coluna,float valor) { PtrNo novo, aux, anterior, cabeca; /* novo vai apontar para o no do valor que esta sendo inserido; aux e anterior sao usados para percorrer os nos da matriz; cabeca armezena o endereco do no cabeca da linha e da coluna em que o novo valor sera inserido */ if(linha >= inicio->linha || coluna >= inicio->coluna) { /* verifica se a posicao x,y nao é invalida */ printf("<insereCasa()> Posicao de insercao(%d,%d) invalida, matriz de tamanho (%d,%d)\n",linha,coluna,inicio->linha,inicio->coluna); return 0; } /* Criando o novo no */ novo = novoNo(); novo->valor = valor; novo->coluna = coluna; novo->linha = linha; if(novo == NULL) { printf("<insereCasa()>Nao consegui criar o no "); return 0; } /* Ligando a linha */ cabeca = inicio->prox_linha; while(cabeca->linha < linha && cabeca->prox_linha != inicio) /* laco que vai ateh a linha onde sera inserido o no */ cabeca = cabeca->prox_linha; /* Verifica se nao existe no cabeça para aquela linha */ if(cabeca->linha != linha) { cabeca = insereCabeca(inicio,linha,-1); /* cria nó cabeca para a linha e guarda endereco em cabeca */ } aux = cabeca->prox_coluna; anterior = cabeca; while(aux != cabeca && aux->coluna < coluna) { /* laco que vai ateh a coluna onde sera inserido o no */ anterior = aux; /* anterior vai armezenar o endereco do no que vai apontar para o novo nó */ aux = aux->prox_coluna; /* aux vai apontar para o nó que deve ser apontado por novo->prox_coluna */ } if(aux->linha == novo->linha && aux->coluna == novo->coluna) { /* se a posicao que quer ser inserida ja existir, apenas substitui o valor */ aux->valor = valor; return 0; } anterior->prox_coluna = novo; novo->prox_coluna = aux; /* ---------------- */ /* Ligando a coluna. A lógica é mesma da ligação da linha */ cabeca = inicio->prox_coluna; while(cabeca->coluna < coluna && cabeca->prox_coluna != inicio) { /* laco que vai ateh a coluna onde sera inserido o no */ cabeca = cabeca->prox_coluna; } /* Verifica se nao existe no cabeça para aquela coluna */ if(cabeca->coluna != coluna) { cabeca = insereCabeca(inicio,-1,coluna); /* cria nó cabeca para a coluna e guarda endereco em cabeca */ } aux = cabeca->prox_linha; anterior = cabeca; while(aux != cabeca && aux->linha < linha) { /* laco que vai ateh a linha onde sera inserido o no */ anterior = aux; /* anterior vai armezenar o endereco do no que vai apontar para o novo nó */ aux = aux->prox_linha; /* aux vai apontar para o nó que deve ser apontado por novo->prox_linha */ } anterior->prox_linha = novo; novo->prox_linha = aux; /* ---------------- */ return 0; }