Lista encadeada
#include
typedef struct no{ int info; struct no *next;
}No, *Nodeptr;
void imprimir_No(No); int inserirNo(No *, int); void inicializar_lista(No **); void inserir_lista(No **, int); void desalocar_lista(No **); void imprimir_lista(No *); int deleteNode(No *,int); void freememory(No *); void OrdenacaoBubble(No *); void Troca(int *,int *); void separa (No *, int );
void inicializar_lista(Nodeptr *p)
{
*p= NULL;
}
int inserirNo(Nodeptr *header, int x)
{
Nodeptr newNo, prevNo, currentNo; newNo = (Nodeptr)malloc(sizeof(No)); // tenta alocar memoria if (newNo == NULL) return 0; // nao conseguiu alocar newNo->info = x; newNo->next = NULL; prevNo = NULL; // ponteiros auxiliares currentNo = *header; // ponteiros auxiliares
if(currentNo == NULL) // insercao do primeiro elemento *header = newNo; else { while(currentNo!=NULL) // posiciona currentNo adequadamente { prevNo = currentNo; currentNo = currentNo-> next; } if (prevNo == NULL) // insercao antes do primeiro { newNo->next = *header; *header = newNo; } else // insercao no meio { prevNo->next=newNo; newNo->next = currentNo; } } return 1;
}
int deleteNode(Nodeptr *header, int x)
{
Nodeptr prevNo, currentNo, temp; if(*header!=NULL) { if(x ==(*header)->info) // remocao do primeiro { temp = *header; *header=(*header)->next; free(temp); } else { prevNo = *header; currentNo = (*header)->next;