int main() {

    tipo_palavra * palavra;

    palavra = inicia_lista("oi");
    insere_elemento(palavra, "tchau");
    insere_elemento(palavra, "feliz natal");
    imprime_lista(palavra);
	printf("-----\n");

	remove_elemento(&palavra, "oi");
	imprime_lista(palavra);
	printf("-----\n");

	remove_elemento(&palavra, "nao existe");
	imprime_lista(palavra);
	printf("-----\n");

	remove_elemento(&palavra, "tchau");
	imprime_lista(palavra);
	printf("-----\n");

	remove_elemento(&palavra, "nao existe");
	imprime_lista(palavra);
	printf("-----\n");

	remove_elemento(&palavra, "feliz natal");
	imprime_lista(palavra);
	printf("-----\n");

}
Exemple #2
0
struct conjunto* uniao( struct conjunto* c1, struct conjunto* c2 ) {

    conjunto* c = criar_conjunto();
    inicia_lista(c);

    lista_encadeada* temp = c1->lista->proximo_elemento;
    lista_encadeada* temp1 = c2->lista->proximo_elemento;

    lista_encadeada* e = c->lista;

    while(temp != NULL || temp1 != NULL) {

        e->proximo_elemento = (lista_encadeada*) MALLOC(sizeof(lista_encadeada));
        e->proximo_elemento->proximo_elemento = NULL;

        if(temp == NULL) {

            e->proximo_elemento->elemento = temp1->elemento;
            temp1 = temp1->proximo_elemento;

        } else if(temp1 == NULL) {

            e->proximo_elemento->elemento = temp->elemento;
            temp = temp->proximo_elemento;

        } else if(temp->elemento > temp1->elemento) {

            e->proximo_elemento->elemento = temp1->elemento;

            temp1 = temp1->proximo_elemento;

        } else if(temp->elemento < temp1->elemento) {

            e->proximo_elemento->elemento = temp->elemento;

            temp = temp->proximo_elemento;

        } else {

            e->proximo_elemento->elemento = temp->elemento;
            temp = temp->proximo_elemento;
            temp1 = temp1->proximo_elemento;

        }

        e = e->proximo_elemento;

    }

    return c;

}
Exemple #3
0
struct conjunto* intersecao( struct conjunto* c1, struct conjunto* c2 ) {

    conjunto* c = criar_conjunto();
    inicia_lista(c);

    lista_encadeada* temp = c1->lista->proximo_elemento;
    lista_encadeada* temp1 = c2->lista->proximo_elemento;
    lista_encadeada* e = c->lista;
    while(temp != NULL && temp1 != NULL) {

        // Elemento são iguais?
        if(temp->elemento == temp1->elemento) {

            e->proximo_elemento = (lista_encadeada*) MALLOC(sizeof(lista_encadeada));
            e->proximo_elemento->proximo_elemento = NULL;

            e->proximo_elemento->elemento = temp1->elemento;

            e = e->proximo_elemento;

            temp = temp->proximo_elemento;
            temp1 = temp1->proximo_elemento;

        } else if(temp->elemento > temp1->elemento) {

            temp1 = temp1->proximo_elemento;

        } else {

            temp = temp->proximo_elemento;

        }

    }

    return c;

}
Exemple #4
0
struct conjunto* diferenca( struct conjunto* c1, struct conjunto* c2 ) {

    conjunto* c = criar_conjunto();
    inicia_lista(c);

    // Roda C1, se houver em c1 e não em c2, adiciona ao conjunto c
    lista_encadeada* temp = c1->lista->proximo_elemento;
    while(temp != NULL) {

        // Elemento não existe em c2?
        if(!pertinencia(c2,temp->elemento)) {

            inserir_elemento(c,temp->elemento);

        }

        temp = temp->proximo_elemento;

    }

    return c;

}
Exemple #5
0
int main() {
    struct conjunto* C[10];
    int i;
    for( i = 0; i < 10; ++i )
        C[i] = criar_conjunto(); //cria os 10 conjuntos vazios
    //ou:
    //C[i] = NULL
    for( i = 0; i < 10; ++i )
        inicia_lista(C[i]);
    conjunto* c;
    char op;
    int c1,c2,c3;
    while( 1 ) {
        scanf("%c", &op);
        switch( op ) {
        case 'A':
            scanf("%d %d", &c1, &c2);
            inserir_elemento(C[c1-1],c2);
            break;
        case 'R':
            scanf("%d %d", &c1, &c2);
            remover_elemento(C[c1-1],c2);
            break;
        case 'L':
            scanf("%d", &c1);
            listar_elementos(C[c1-1]);
            break;
        case 'F':
            scanf("%d", &c1);
            deletar_conjunto(C[c1-1]);
            C[c1-1] = criar_conjunto();
            inicia_lista(C[c1-1]);
            break;
        case 'I':
            scanf("%d %d %d", &c1, &c2, &c3);
            c = intersecao(C[c1-1],C[c2-1]);
            deletar_conjunto(C[c3-1]);
            C[c3-1] = c;
            break;
        case 'U':
            scanf("%d %d %d", &c1, &c2, &c3);
            c = uniao(C[c1-1],C[c2-1]);
            deletar_conjunto(C[c3-1]);
            C[c3-1] = c;
            break;
        case 'P':
            scanf("%d %d", &c1, &c2);
            if(pertinencia(C[c1-1],c2))
                printf("S\n");
            else
                printf("N\n");
            break;
        case 'D':
            scanf("%d %d %d", &c1, &c2, &c3);
            c = diferenca(C[c1-1],C[c2-1]);
            deletar_conjunto(C[c3-1]);
            C[c3-1] = c;
            break;
        case 'C':
            scanf("%d %d", &c1, &c2);
            if(subconjunto(C[c1-1],C[c2-1]))
                printf("S\n");
            else
                printf("N\n");
            break;
        case '=':
            scanf("%d %d", &c1, &c2);
            if(igualdade(C[c1-1],C[c2-1]))
                printf("S\n");
            else
                printf("N\n");
            break;
        case '#':
            scanf("%d", &c1 );
            printf("%d\n", cardinalidade( C[c1-1]) );
            break;
        case 'X':
            for( i = 0; i < 10; ++i )
                deletar_conjunto(C[i]);
            bapply(bprint); //não modifique esta linha
            return 0;
        }

    }

}