/**************************************************************************
				AED II
***************************************************************************
                    Implementação de listas de inteiros
***************************************************************************
     Proposta de implementação de Ana Maria de Almeida - Abril 2004
***************************************************************************
 Módulos sobre representação dinâmica de lista linear simples de inteiros
***************************************************************************
  Definições de tipos e declarações globais estão no ficheiro declara.h
**************************************************************************/
#include "declara.h"
/**************************************************************************/
/*                      Cria uma lista vazia                              */
Plist criarlst(){
    return NULL;
}

/*                  Testa se uma lista está vazia                         */
Boolean vazialst(Plist lst){
    if( lst ) return True;
    else return False;
}

/*               Junta um novo elemento na cabeça da lista                 */
void juntalst(Item x, Plist *lst){
Plist aux, cria_node();

    aux = *lst;
    *lst = cria_node(x);
    if( *lst ) // existe pelo menos 1 elemento
	(*lst)->next = aux;
}

/*                  Cria um novo elemento para uma lista                   */
Plist cria_node(Item val){
Plist ptr;
void *Mem1();

    ptr = (Plist) Mem1(sizeof(Listnode));
    ptr->value = val;
    ptr->next = NULL;
    return ptr;
}

/*               Testa se um elemento pertence a uma lista                 */
Boolean pertencelst(Item x, Plist lst){
Boolean pert, vazialst();

    pert = False;
    while( !vazialst(lst) && !(pert =(lst->value == x)) ) lst = lst->next;
    return pert;
}

/*    Concatena 2 listas devolvendo o resultado na primeira lista           */
Boolean conclst(Plist *lst1, Plist lst2){
Plist   aux;
Boolean vazialst();

    if(!vazialst(*lst1)){
        aux = *lst1;
        while( !vazialst(aux->next) ) aux = aux->next;
	   // aux aponta o último elemento de lst1
	aux->next = lst2;
     }
    else *lst1 = lst2;
}




