示例#1
0
文件: lista.c 项目: mateus51/TPs
//o item a ser retirado é seguinte ao apontado por p
// retorna o tamanho do chunk retirado;
int Retira(Lista *lista, Apontador p) {
	if (ListaVazia(lista) || p == NULL || p->prox == NULL) {
		printf("Erro ao retirar da lista!   :(\n");
		if (ListaVazia(lista)) printf(" lista vazia!\n\n");
		else if (p == NULL) printf(" p == NULL!\n\n");
		else if (p->prox == NULL) printf(" p->prox == NULL\n\n");
		else printf(" ???\n\n");
		exit(EXIT_FAILURE);
	}
	Apontador q = p->prox;
	p->prox = q->prox;
	if (p->prox == NULL) lista->ultimo = p;
	int freed_size = q->chunk_size;
	free(q);
	return freed_size;
}
示例#2
0
文件: lista.c 项目: mateus51/TPs
void FreeLista(Lista *lista) {
	Apontador aux = lista->primeiro;
	while (!ListaVazia(lista)) {
		Retira(lista, aux);
	}
	free(lista->primeiro);
	free(lista);
}
示例#3
0
void ImprimeGrafo(TipoGrafo *Grafo)
{ short i;
  for (i = 0; i <= Grafo->NumVertices - 1; i++) 
    { printf("Vertice %d:  ", i);
      if (!ListaVazia(Grafo->Adj[i]))
	ImprimeLista(Grafo->Adj[i]);
      putchar('\n');
    }
} 
示例#4
0
//FUNÇÃO PARA IRMPRIMIR O GRAFO GERADO. NÃO UTILIZADO NESTE PROGRAMA
void ImprimeGrafo(TipoGrafo *Grafo){
  int i;
  for (i = 0; i <= Grafo->NumVertices - 1; i++){
      printf("\nVertice %2d: ", i);
      if (!ListaVazia(Grafo->Adj[i])){
        ImprimeLista(Grafo->Adj[i]);
      }
    }
    printf("\n");
}
示例#5
0
文件: lista.c 项目: mateus51/TPs
// Coloca o item seguinte ao apontado por p na primeira
// posição da lista
void SendToFirstPosition(Lista *lista, Apontador p) {
	if (ListaVazia(lista) || p == NULL || p->prox == NULL) {
		printf("Erro ao anviar para o topo da lista!\n");
		if (ListaVazia(lista)) printf(" lista vazia!\n\n");
		else if (p == NULL) printf(" p == NULL!\n\n");
		else if (p->prox == NULL) printf(" p->prox == NULL\n\n");
		else printf(" ???\n\n");
		return;
	}

	if (p != lista->primeiro) {
		Apontador aux = p->prox;
		p->prox = aux->prox;
		aux->prox = lista->primeiro->prox;
		lista->primeiro->prox = aux;
		if (lista->ultimo == aux) lista->ultimo = p;
	}

}
示例#6
0
文件: lista.c 项目: mateus51/TPs
// Retira o último item da lista
int RetiraUltimo(Lista *lista) {
	if (!ListaVazia(lista)) {
		Apontador aux = lista->primeiro;
		while (aux->prox->prox != NULL) {
			aux = aux->prox;
		}
		return Retira(lista, aux);
	}
	return 0;
}
示例#7
0
文件: Lista.c 项目: sqrt11/Arquivo2
int InserirLista(List * Lista, char * Info){
    // Validade dos Argumentos
    if (Lista == NULL || Info == NULL)
        return ArgumentoInvalido;

    // Auxiliares
    NoLista * L;
    L = (NoLista*) malloc(sizeof(NoLista));
    L->Info = (char *) malloc(sizeof(char) * strlen(Info));
    strcpy(L->Info, Info);
    L->Proximo = NULL;

    // Insere como primeira se vazia
    if (ListaVazia(Lista)){
        Lista->Primeiro = L;
        return Sucesso;
    }

    // Insere no início
    L->Proximo = Lista->Primeiro;
    Lista->Primeiro = L;
    return Sucesso;
}