Buscar

Lista dinâmica (insere/exclui fi, innicio e qualquer posição)

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <stdio.h>
#include <stdlib.h>
typedef struct ld{
int valor;
struct ld *prox;
}ld;
ld *inicio = NULL, *aux = NULL, *novo = NULL;
void novo_elemento(){
novo = malloc(sizeof(ld));//malloc aloca a memória de um tamanho(bytes) que caiba o (ld)
printf("Digite o valor");
scanf("%d",&novo->valor); //*novo.valor == novo->valor
novo->prox = NULL;
}
void insere_inicio(){
novo_elemento();
novo->prox = inicio;
inicio=novo;
}
void remove_inicio(){
if(inicio!=NULL){
 aux=inicio;
 inicio=inicio->prox;
 free(aux);
}
}
void insere_fim(){
novo_elemento();
if(inicio == NULL){
 inicio = novo;
}
else{
 aux=inicio;
 while(aux->prox !=NULL)
 aux= aux->prox;
 aux->prox = novo;
 }
}
void remove_fim(){
 ld *aux2 = inicio;
if(inicio==NULL){
 printf("Lista vazia");
}
else{
 aux=inicio;
 while(aux->prox != NULL)
 aux= aux->prox;
 while(aux2->prox != aux)
 aux2 = aux2->prox;
 aux2->prox = NULL;
 free(aux);
 }
}
void insere_qq_pos(int pos){
int cont = 1;
ld *aux2 = inicio;
if(pos==1){
 insere_inicio();
}
else{
 novo_elemento();
while(cont < pos){
 aux = aux->prox;
 cont++;
}
while(aux2->prox != aux)
 aux2 = aux2->prox;
 novo->prox = aux2->prox;
 aux2->prox=novo;
}
}
void remove_qq_pos(int pos){
int cont = 1;
ld *aux2 = inicio;
if(inicio==NULL){
 printf("Lista vazia");
}
else{
 if(pos == 1){
 remove_inicio();
 }else{
 aux=inicio;
 while(cont<pos){
 aux=aux->prox;
 cont++;
 }
 while(aux2->prox != aux)
 aux2=aux2->prox;
 aux2->prox = aux->prox;
 free(aux);
 }
}
}
void mostrar_lista(){
if(inicio == NULL){
 printf("Lista Vazia");
}
else{
 aux=inicio;
 while(aux != NULL) {
 printf("%d",aux->valor);
 aux = aux->prox;
 }
}
}
int main(){
 insere_inicio();
 insere_inicio();
 insere_inicio();
 mostrar_lista();
 return 0;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando

Outros materiais