Skip to content

Instantly share code, notes, and snippets.

@joffilyfe
Last active August 29, 2015 14:24
Show Gist options
  • Save joffilyfe/e152e9baa12c91d75aa0 to your computer and use it in GitHub Desktop.
Save joffilyfe/e152e9baa12c91d75aa0 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
typedef struct no {
int dado;
struct no *proximo;
} No;
typedef struct desc {
No *primeiro;
No *ultimo;
int quantidade;
} Descritor;
void criar(Descritor *desc) {
// *lst = NULL;
desc->primeiro = NULL;
desc->ultimo = NULL;
desc->quantidade = 0;
}
int inserir(Descritor *desc, int valor) {
No *novo, *atual = desc->primeiro, *anterior;
novo = (No*)malloc(sizeof(No));
if (novo == NULL) return 0;
novo->proximo = NULL;
anterior = NULL;
while (atual != NULL && valor >= atual->dado) {
if (atual->dado == valor) return 0;
anterior = atual;
atual = atual->proximo;
}
if (anterior == NULL) {
novo->proximo = desc->primeiro;
if (desc->primeiro == NULL) desc->ultimo = novo;
desc->primeiro = novo;
} else {
anterior->proximo = novo;
novo->proximo = atual;
if (novo->proximo == NULL) {
desc->ultimo = anterior->proximo;
}
}
novo->dado = valor;
desc->quantidade += 1;
return 1;
}
void exibir(Descritor *desc) {
No *atual = desc->primeiro;
while(atual != NULL) {
printf("%d ", atual->dado);
atual = atual->proximo;
}
printf("\n");
}
int remover(Descritor *desc, int valor) {
No *atual, *anterior;
anterior = NULL;
atual = desc->primeiro;
if (atual == NULL) return 0;
while (atual != NULL && atual->dado != valor) {
anterior = atual;
atual = atual->proximo;
}
if (anterior == NULL) {
desc->primeiro = atual->proximo;
if (atual->proximo == NULL) desc->ultimo = NULL;
} else {
anterior->proximo = atual->proximo;
if (atual->proximo == NULL) desc->ultimo = anterior;
}
free(atual);
desc->quantidade -= 1;
return 1;
}
int main(void) {
Descritor helper;
// No *Inicio;
criar(&helper);
inserir(&helper, 10);
inserir(&helper, 11);
inserir(&helper, 12);
inserir(&helper, 1);
inserir(&helper, 5);
inserir(&helper, 50);
exibir(&helper);
// remover(&helper, 12);
exibir(&helper);
printf("quantidade: %d\n", helper.quantidade);
printf("Ultimo: %d\n", helper.ultimo->dado);
printf("Primeiro: %d\n", helper.primeiro->dado);
return 1;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment