Buscar

Lista_duplamente_encadeada_inserir_excluir_imprimir_C

Prévia do material em texto

/* Lista duplamente encadeada simulando uma lista de reproducão, onde tem inserir, excluir e reproduzir(imprimr)
música.
 * Aluno: Thiago Mendes da Silva.
 * Acadêmico de Ciência da Computação.
 * Universidade Federal da Fronteira Sul. */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
struct lista {
char musica[50], autor[30];
struct lista *next, *prev;
};
typedef struct lista Lista;
Lista *insere(Lista *l){
Lista *ultimo, *new;
new =(Lista *)malloc(sizeof(Lista));
if(l==NULL){
printf("Informe o nome da musica: ");
//__fpurge(stddin);
fflush(stdin);
gets(new->musica);
printf("Informe o nome do autor: ");
//__fpurge(stddin);
fflush(stdin);
gets(new->autor);
new->next=NULL;
new->prev=NULL;
l = new;
ultimo = new;
return l;
}
else{
for(ultimo = l; ultimo -> next != NULL; ultimo = ultimo -> next);
printf("Informe o nome da musica: ");
//__fpurge(stddin);
fflush(stdin);
gets(new->musica);
printf("Informe o nome do autor: ");
//__fpurge(stddin);
fflush(stdin);
gets(new->autor);
new->next=NULL;
ultimo->next=new;
new->prev=ultimo;
return l;
}
}
Lista *retira(Lista *l, char MUSICA[50]){
Lista *p;
int esta = 0;
if(l==NULL){
printf("Lista reproducao vazia");
}
for(p=l;p!=NULL;p=p->next){
if(strcmp(p->musica, MUSICA) == 0){
esta = 1;
break;
}
}
if(esta == 0){
printf("Musica nao encontrada");
return l;
}
else{
printf("Musica encontrada");
}
if(p->prev==NULL && p->next==NULL){
l=NULL;
return l;
}
else{
if(p->prev==NULL){
p=p->next;
p->prev=NULL;
return p;
}
else{
if(p->next==NULL){
p->prev->next=NULL;
p->prev=NULL;
free(p);
return l;
}
else{
p->prev->next=p->next;
p->next->prev=p->prev;
free(p);
return l;
}
}
}
}
void imprime(Lista *l){
Lista*p;
if(l==NULL){
printf("Lista de reprodecao vazia");
}
else{
for(p=l;p!=NULL;p=p->next){
printf("Musica: %s - Autor: %s\n",p->musica,p->autor);
}
}
}
int main (){
Lista *l=NULL;
int OP,sair=0;
char MUS[40];
while(sair!=4){
puts("\tMenu");
puts("1 - Inserir musica");
puts("2 - Excluir musica");
puts("3 - Reproduzir ");
puts("4 - Sair");
scanf("%d",&OP);
switch(OP){
case 1: l = insere(l);
break;
case 2: puts("Informe o nome da musica");
//__fpurge(stddin);
fflush(stdin);
gets(MUS);
l= retira(l,MUS);
break;
case 3: imprime(l);
break;
case 4: sair=4;
break;
}
}
return 0;
}

Continue navegando