예제 #1
0
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++;
}
예제 #2
0
/* Seta valor de raiz */
void setaRaiz(PPNo raiz,int chave) {
	PNo novo;
	
	if(!*raiz) {
		novo = novoNo(chave);
		*raiz = novo;
	}
}
예제 #3
0
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ó */
	
}
예제 #5
0
// 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);
	}
}
예제 #6
0
/* 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;
}
예제 #7
0
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;


}
예제 #8
0
/* 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;
}
예제 #9
0
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);
    }
}
예제 #10
0
/* 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 */
}
예제 #11
0
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;
    }
}
예제 #12
0
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;
    }
}
예제 #13
0
/* 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;
}