Exemplo n.º 1
0
/**
    Função que aloca memória para uma instância da estrutura Lista e inicializa os seus campos.
 */
Lista LIS_Criar()
{
    string VALOR_QUALQUER = "extremo";

    Lista lista = (Lista)malloc(sizeof(tpLista));
    if( lista == NULL )
    {
        return NULL;
    }

    
    lista->tamanho = 0;
    
    lista->cauda = CriarNo((string)VALOR_QUALQUER);
    

    if( lista->cauda == NULL )
    {
        return NULL;
    }

    lista->cabeca = CriarNo(VALOR_QUALQUER);
    if( lista->cabeca == NULL )
    {
        return NULL;
    }
    
    lista->cauda->anterior = lista->cabeca;
    lista->cauda->proximo = NULL;

    lista->cabeca->proximo  = lista->cauda;
    lista->cabeca->anterior = NULL;
    
    return lista;
}
Exemplo n.º 2
0
   ARV_tpCondRet CriarNoRaiz( char ValorParm )
   {

      ARV_tpCondRet CondRet ;
      tpNoArvore * pNo ;

      if ( pArvore == NULL )
      {
         CondRet = ARV_CriarArvore( ) ;

         if ( CondRet != ARV_CondRetOK )
         {
            return CondRet ;
         } /* if */
      } /* if */

      if ( pArvore->pNoRaiz == NULL )
      {
         pNo = CriarNo( ValorParm ) ;
         if ( pNo == NULL )
         {
            return ARV_CondRetFaltouMemoria ;
         } /* if */
         pArvore->pNoRaiz = pNo ;
         pArvore->pNoCorr = pNo ;

         return ARV_CondRetOK ;
      } /* if */

      return ARV_CondRetNaoCriouRaiz ;

   } /* Fim função: ARV Criar nó raiz da árvore */
Exemplo n.º 3
0
ARV_tpCondRet ARV_InserirEsquerda( ARV_tppArvore pArvore,  void * conteudoNo )
{

	ARV_tpCondRet CondRet ;

    tppNoArvore pNo ;

	/* Tratar árvore inexistente */

	if ( pArvore == NULL ) 
	{
		return ARV_CondRetArvoreInexistente;
	} /* if */ 
	
	/* fim ativa: Tratar árvore inexistente */

    /* Tratar árvore vazia */

	if ( pArvore->pNoRaiz == NULL )
	{
		return ARV_CondRetArvoreVazia;
	} /* if */ 
	
	/* fim ativa: Tratar árvore vazia */
       
	/* Tratar nó corrente NULL, erro de estrutura */

	if ( pArvore->pNoCorr == NULL )
    {
		return ARV_CondRetErroEstrutura ;  
	} /* if */ 
	
	/* fim ativa: Tratar nó corrente NULL, erro de estrutura */
    
	/* Tratar folha esquerda, criar nó à esquerda */

	if ( pArvore->pNoCorr->pNoEsq == NULL )
    {        
		pNo = CriarNo ( conteudoNo ) ;
        if ( pNo == NULL )
        {
			return ARV_CondRetFaltouMemoria ;   
		} /* if */
        
		pNo->pNoPai				 = pArvore->pNoCorr;
        pArvore->pNoCorr->pNoEsq = pNo;
		pArvore->pNoCorr		 = pNo;
		pArvore->numNos++;

        return ARV_CondRetOK ;

	} /* if */ 
	
	/* fim ativa: Tratar folha à esquerda, criar nó à esquerda */

    /* Tratar não folha à esquerda */

    return ARV_CondRetNaoEhFolha ;

} /* Fim função: ARV Adicionar filho à esquerda */
/*
 Função que insere um valor numa determinada posição da lista. Após a execução desta função, o elemento inserido será o i-esimo elemento da lista.
 @param lista - lista em que será feita a inserção
 @param v - valor a ser inserido na lista
 @param i - indica a posição que o novo elemento ocupará após a inserção
 @return true se inseriu com sucesso, false caso contrário
 */
bool LIS_Inserir(Lista lista, int v, int i)
{
    No novo = CriarNo(v);
    if( novo == NULL ){
        return false;
    }
    
    No no = lista->cabeca;

    if (i > lista->tamanho+1 || i <= 0){  
        return false;
    }
    
    if(i == lista->tamanho+1){
        return LIS_InserirFim(lista,v);
    }
    if(lista->tamanho == 0){
        return LIS_InserirInicio(lista,v);
    }
    
    while (--i){   
        no = no->proximo;
    }
    
    novo->anterior = no;
    novo->proximo = no->proximo;
    no->proximo->anterior = novo;
    no->proximo = novo;
    lista->tamanho++;

    return true;
}
Exemplo n.º 5
0
   ARV_tpCondRet ARV_InserirDireita( void* pArvoreParm, void* ListaCharParm )
   {
      tpArvore * pArvore ;

      ARV_tpCondRet CondRet ;

      tpNoArvore * pCorr ;
      tpNoArvore * pNo ;

      if ( pArvoreParm == NULL )
      {
         return ARV_CondRetArvoreNaoExiste ;
      } 

      pArvore = ( tpArvore* )( pArvoreParm );

      /* Tratar vazio, direita */

         CondRet = CriarNoRaiz( pArvore, ListaCharParm ) ;
         if ( CondRet != ARV_CondRetNaoCriouRaiz )
         {
            return CondRet ;
         } /* if */

      /* Criar nó à direita de folha */

         pCorr = pArvore->pNoCorr ;
         if ( pCorr == NULL )
         {
            return ARV_CondRetErroEstrutura ;
         } /* if */

         if ( pCorr->pNoDir == NULL )
         {
            pNo = CriarNo( pArvore, ListaCharParm ) ;
            if ( pNo == NULL )
            {
               return ARV_CondRetFaltouMemoria ;
            } /* if */
            pNo->pNoPai      = pCorr ;
            pCorr->pNoDir    = pNo ;
            pArvore->pNoCorr = pNo ;

            return ARV_CondRetOK ;
         } /* if */

      /* Tratar não folha à direita */

         return ARV_CondRetNaoEhFolha ;

   } /* Fim função: ARV Adicionar filho à direita */
/**
    Função que aloca memória para uma instância da estrutura Lista e inicializa os seus campos.
 */
Lista LIS_Criar(){
    Lista lista = (Lista)malloc(sizeof(tpLista));
    if( lista == NULL ){
        return NULL;
    }

    lista->cabeca = CriarNo(VALOR_QUALQUER);
    if( lista->cabeca == NULL ){
        return NULL;
    }

    lista->cauda = CriarNo(VALOR_QUALQUER);
    if( lista->cauda == NULL ){
        return NULL;
    }


    lista->cabeca->proximo  = lista->cauda;
    lista->cauda->anterior = lista->cabeca;
    lista->cabeca->anterior = NULL;
    lista->cauda->proximo = NULL;

    return lista;
}
/*
 Função que insere um valor no início da lista. Após a execução desta função, o elemento inserido será o primeiro elemento da lista.
 @param lista - lista em que será feita a inserção
 @param v - valor a ser inserido na lista
 @return true se inseriu com sucesso, false caso contrário
 */
bool LIS_InserirInicio(Lista lista, int v)
{
    No no = CriarNo(v);
    if( no == NULL ){
        return false;
    }

    No primeiro = lista->cabeca->proximo;


    lista->cabeca->proximo = no;
    no->anterior = lista->cabeca;
    no->proximo = primeiro;
    primeiro->anterior = no;

    return true;
}
/*
 Função que insere um valor no fim da lista. Após a execução desta função, o elemento inserido será o último elemento da lista.
 @param lista - lista em que será feita a inserção
 @param v - valor a ser inserido na lista
 @return true se inseriu com sucesso, false caso contrário
 */
bool LIS_InserirFim(Lista lista, int v)
{
    No no = CriarNo(v);
    if( no == NULL ){
        return false;
    }
    
    No ultimo = lista->cauda->anterior;

    lista->cauda->anterior = no;
    no->proximo = lista->cauda;
    no->anterior = ultimo;    
    ultimo->proximo = no;

    lista->tamanho++;
    return true;
}
Exemplo n.º 9
0
bool LIS_InserirFim(Lista lista, string conteudo, string nome, string dataHora)
{
    No no = CriarNo(conteudo,nome,dataHora);

    if( no == NULL )
    {
        return false;
    }
    
    No ultimo = lista->cauda->anterior;

    lista->cauda->anterior = no;
    no->proximo = lista->cauda;
    no->anterior = ultimo;    
    ultimo->proximo = no;
    lista->tamanho++;
    return true;
}
Exemplo n.º 10
0
   ARV_tpCondRet ARV_InserirDireita( char ValorParm )
   {

      ARV_tpCondRet CondRet ;

      tpNoArvore * pCorr ;
      tpNoArvore * pNo ;

      /* Tratar vazio, direita */

         CondRet = CriarNoRaiz( ValorParm ) ;
         if ( CondRet != ARV_CondRetNaoCriouRaiz )
         {
            return CondRet ;
         } /* if */

      /* Criar nó à direita de folha */

         pCorr = pArvore->pNoCorr ;
         if ( pCorr == NULL )
         {
            return ARV_CondRetErroEstrutura ;
         } /* if */

         if ( pCorr->pNoDir == NULL )
         {
            pNo = CriarNo( ValorParm ) ;
            if ( pNo == NULL )
            {
               return ARV_CondRetFaltouMemoria ;
            } /* if */
            pNo->pNoPai      = pCorr ;
            pCorr->pNoDir    = pNo ;
            pArvore->pNoCorr = pNo ;

            return ARV_CondRetOK ;
         } /* if */

      /* Tratar não folha à direita */

         return ARV_CondRetNaoEhFolha ;

   } /* Fim função: ARV Adicionar filho à direita */
Exemplo n.º 11
0
ARV_tpCondRet ARV_CriarNoRaiz ( ARV_tppArvore pArvore, void * conteudoNo )
{
	  
      ARV_tpCondRet CondRet;
	  tppNoArvore pNo;

	  /* Tratar árvore inexistente */

      if ( pArvore == NULL )
      {
	      return  ARV_CondRetArvoreInexistente ;
	  } /* if */ 
	  
	  /* fim ativa: Tratar árvore inexistente */

	  /* Tratar árvore vazia */

      if ( pArvore->pNoRaiz == NULL )
      {
		 
         pNo = CriarNo ( conteudoNo ) ;
         if ( pNo == NULL )
         {
            return ARV_CondRetFaltouMemoria ;
		 } /* if */

		 pArvore->pNoRaiz = pNo ;
         pArvore->pNoCorr = pNo ;
		 pArvore->numNos++;

         return ARV_CondRetOK ;
      
	  } /* if */ 
	  
	  /* fim ativa: Tratar árvore vazia */

	  /* Tratar não folha à direita */

      return ARV_CondRetNaoCriouRaiz ;

} /* Fim função: ARV Criar nó raiz da árvore */
Exemplo n.º 12
0
   ARV_tpCondRet CriarNoRaiz( tpArvore* pArvore, void* ListaCharParm )
   {
      tpNoArvore * pNo ;
      
      ARV_tpCondRet CondRet ;
      
      if ( pArvore->pNoRaiz == NULL )
      {
         pNo = CriarNo( pArvore, ListaCharParm ) ;
         if ( pNo == NULL )
         {
            return ARV_CondRetFaltouMemoria ;
         } /* if */
         pArvore->pNoRaiz = pNo ;
         pArvore->pNoCorr = pNo ;

         return ARV_CondRetOK ;
      } /* if */

      return ARV_CondRetNaoCriouRaiz ;

   } /* Fim função: ARV Criar nó raiz da árvore */
Exemplo n.º 13
0
MAT_tpCondRet PreparaEstruturaMatriz( MAT_tpMatriz * tpMat, GRA_tppGrafo pGrafo  , int numElementos ){

	int i = 0, j = 0;
	
	char * IdVertices[64] = 
	{
		"A1","A2","A3","A4","A5","A6","A7","A8",
		"B1","B2","B3","B4","B5","B6","B7","B8",
		"C1","C2","C3","C4","C5","C6","C7","C8",
		"D1","D2","D3","D4","D5","D6","D7","D8",
		"E1","E2","E3","E4","E5","E6","E7","E8",
		"F1","F2","F3","F4","F5","F6","F7","F8",
		"G1","G2","G3","G4","G5","G6","G7","G8",
		"H1","H2","H3","H4","H5","H6","H7","H8"
	};

	tpElemMatriz * tpElemLesteCabeca   = NULL;
	tpElemMatriz * tpElemSudesteCabeca = NULL;
	tpElemMatriz * tpElemSulCabeca     = NULL;
	tpElemMatriz * tpElemLesteNo	   = NULL;
	tpElemMatriz * tpElemSudesteNo	   = NULL;
	tpElemMatriz * tpElemSulNo		   = NULL;
	tpElemMatriz * tpElem			   = CriarNo( pGrafo , IdVertices[0] );
	if(tpElem == NULL)
	{
		return MAT_CondRetFaltouMemoria ;
	}

	if(numElementos == 1){
		tpMat->pNoCorr       = tpElem;
		tpMat->pNoRaiz       = tpElem;
		tpMat->pNoIndLinha   = tpElem;
		return MAT_CondRetOK;
	}

	numElementos = numElementos - 1;

	

	for(i=0;i<=numElementos;i++){

		for(j=0;j<=numElementos;j++){	

			
					/* testa a condicão para 3 adjacentes */
				if((i==0 || i==numElementos) && (j==0 || j==numElementos)){

					if(i==0 && j==0){
						tpMat->pNoCorr       = tpElem;
						tpMat->pNoRaiz       = tpElem;
						tpMat->pNoIndLinha   = tpElem;

						tpElemLesteCabeca   = CriarNo( pGrafo , IdVertices[1] );
						tpElemSudesteCabeca = CriarNo( pGrafo , IdVertices[9] );
						tpElemSulCabeca     = CriarNo( pGrafo , IdVertices[8]);
						if(tpElemLesteCabeca==NULL || tpElemSudesteCabeca==NULL || tpElemSulCabeca==NULL){
							return MAT_CondRetFaltouMemoria ;
						}						
						tpMat->pNoCorr->pNoLeste     = tpElemLesteCabeca;
						tpMat->pNoCorr->pNoSudeste   = tpElemSudesteCabeca;
						tpMat->pNoCorr->pNoSul       = tpElemSulCabeca;


					}
					if(i==0 && j==numElementos){
						
						tpMat->pNoCorr->pNoLeste->pNoSul       = tpMat->pNoCorr->pNoSudeste;
						tpMat->pNoCorr->pNoLeste->pNoSudoeste  = tpMat->pNoCorr->pNoSul;
						tpMat->pNoCorr->pNoLeste->pNoOeste     = tpMat->pNoCorr;


						tpMat->pNoCorr = tpMat->pNoCorr->pNoLeste ;
							/* seta como corrente */

					}
					if(i==numElementos && j==0){

						tpMat->pNoIndLinha->pNoSul->pNoNorte     = tpMat->pNoIndLinha;
						tpMat->pNoIndLinha->pNoSul->pNoNordeste  = tpMat->pNoIndLinha->pNoLeste;
						tpMat->pNoIndLinha->pNoSul->pNoLeste     = tpMat->pNoIndLinha->pNoSudeste;


						tpMat->pNoCorr      = tpMat->pNoIndLinha->pNoSul;
							/* seta como corrente */

						tpMat->pNoIndLinha  = tpMat->pNoIndLinha->pNoSul;
							/* seta como indice da linha */

					}
					if(i==numElementos && j==numElementos){

						tpMat->pNoCorr->pNoLeste->pNoNorte     = tpMat->pNoCorr->pNoNordeste;
						tpMat->pNoCorr->pNoLeste->pNoNoroeste  = tpMat->pNoCorr->pNoNorte;
						tpMat->pNoCorr->pNoLeste->pNoOeste     = tpMat->pNoCorr;

						tpMat->pNoCorr  = tpMat->pNoCorr->pNoLeste;
							/* seta como corrente */

					}

				}

					 /* testa a condição para 5 adjacentes */
				else if(i==0 || i==numElementos || j==0 || j==numElementos){


					if(i==0 && (j!=numElementos || j!=0)){
						
						tpMat->pNoCorr->pNoLeste->pNoSul      = tpMat->pNoCorr->pNoSudeste;
						tpMat->pNoCorr->pNoLeste->pNoSudoeste = tpMat->pNoCorr->pNoSul;
						tpMat->pNoCorr->pNoLeste->pNoOeste    = tpMat->pNoCorr;

						tpElemLesteNo   = CriarNo( pGrafo , IdVertices[j+1]);
						tpElemSudesteNo = CriarNo( pGrafo , IdVertices[(numElementos * (i+1)) + (j+2)]);
						if(tpElemLesteNo==NULL || tpElemSudesteNo==NULL){
							return MAT_CondRetFaltouMemoria ;
						}
						tpMat->pNoCorr->pNoLeste->pNoLeste    = tpElemLesteNo;
						tpMat->pNoCorr->pNoLeste->pNoSudeste  = tpElemSudesteNo;

						tpMat->pNoCorr  = tpMat->pNoCorr->pNoLeste;
							/* seta como corrente */

					}

					if(j==0 && (i!=numElementos || i!=0)){

						tpMat->pNoIndLinha->pNoSul->pNoLeste    = tpMat->pNoIndLinha->pNoSudeste;				
						tpMat->pNoIndLinha->pNoSul->pNoNordeste = tpMat->pNoIndLinha->pNoLeste;
						tpMat->pNoIndLinha->pNoSul->pNoNorte    = tpMat->pNoIndLinha;

						tpElemSulNo     = CriarNo( pGrafo , IdVertices[(numElementos * (i+1)) + (i+1)]);
						tpElemSudesteNo = CriarNo( pGrafo , IdVertices[(numElementos * (i+1)) + (i+2)]);
						if(tpElemSulNo==NULL || tpElemSudesteNo==NULL){
							return MAT_CondRetFaltouMemoria ;
						}
						tpMat->pNoIndLinha->pNoSul->pNoSudeste  = tpElemSudesteNo;
						tpMat->pNoIndLinha->pNoSul->pNoSul      = tpElemSulNo;

						tpMat->pNoCorr      = tpMat->pNoIndLinha->pNoSul;
							/* seta como corrente */

						tpMat->pNoIndLinha  = tpMat->pNoIndLinha->pNoSul;
							/* seta como indice da linha */

					}
					if(i==numElementos && (j!=numElementos || j!=0)){
			    
						tpMat->pNoCorr->pNoLeste->pNoLeste    = tpMat->pNoCorr->pNoNordeste->pNoSudeste;
						tpMat->pNoCorr->pNoLeste->pNoNordeste = tpMat->pNoCorr->pNoNordeste->pNoLeste;
						tpMat->pNoCorr->pNoLeste->pNoNorte    = tpMat->pNoCorr->pNoNordeste;
						tpMat->pNoCorr->pNoLeste->pNoNoroeste = tpMat->pNoCorr->pNoNorte;
						tpMat->pNoCorr->pNoLeste->pNoOeste    = tpMat->pNoCorr;

						tpMat->pNoCorr  = tpMat->pNoCorr->pNoLeste;
							/* seta como corrente */

					}
					if(j==numElementos && (i!=numElementos || i!=0)){

						tpMat->pNoCorr->pNoLeste->pNoNorte     = tpMat->pNoCorr->pNoNordeste;
						tpMat->pNoCorr->pNoLeste->pNoSul       = tpMat->pNoCorr->pNoSudeste;
						tpMat->pNoCorr->pNoLeste->pNoSudoeste  = tpMat->pNoCorr->pNoSul;
						tpMat->pNoCorr->pNoLeste->pNoOeste     = tpMat->pNoCorr;
						tpMat->pNoCorr->pNoLeste->pNoNoroeste  = tpMat->pNoCorr->pNoNorte;

						tpMat->pNoCorr  = tpMat->pNoCorr->pNoLeste;
							/* seta como corrente */

					}

				}
					/* 8 adjacentes */
				else{

						tpMat->pNoCorr->pNoLeste->pNoNorte     = tpMat->pNoCorr->pNoNordeste;
						tpMat->pNoCorr->pNoLeste->pNoNordeste  = tpMat->pNoCorr->pNoNordeste->pNoLeste;
						tpMat->pNoCorr->pNoLeste->pNoLeste     = tpMat->pNoCorr->pNoNordeste->pNoSudeste;
						tpMat->pNoCorr->pNoLeste->pNoSul       = tpMat->pNoCorr->pNoSudeste;
						tpMat->pNoCorr->pNoLeste->pNoSudoeste  = tpMat->pNoCorr->pNoSul;
						tpMat->pNoCorr->pNoLeste->pNoOeste     = tpMat->pNoCorr;
						tpMat->pNoCorr->pNoLeste->pNoNoroeste  = tpMat->pNoCorr->pNoNorte;
						tpElemSudesteNo   = CriarNo( pGrafo , IdVertices[(numElementos * (i+1)) + ((j+1)+(i+1))]);
						if(tpElemSudesteNo==NULL){
							return MAT_CondRetFaltouMemoria ;
						}
						tpMat->pNoCorr->pNoLeste->pNoSudeste   = tpElemSudesteNo;


						tpMat->pNoCorr = tpMat->pNoCorr->pNoLeste;
							/* seta como corrente */

				}
		}

	}

	 
	return MAT_CondRetOK;

}