Buscar

lista_descritor

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

#include <stdio.h>
#include <stdlib.h>
typedef int tipoelemento;
typedef struct No{
 tipoelemento elem;
 struct No *proximo;
}tipoNo;
typedef struct{
 tipoNo *inicio;
 int numelem;
 int maior;
 tipoNo *fim;
}tipoDescritor;
typedef tipoDescritor tipolista;
tipolista lista;
void fazvazia(tipolista *L){
 tipoNo *atual, *prox;
 atual=L->inicio;
 while(atual!=NULL){
 prox=atual->proximo;
 free(atual);
 atual=prox; 
 }
 L->fim=NULL;
 L->inicio=NULL;
}
int insere(tipolista *L, int pos, tipoelemento e){
 int erro=0, cont;
 tipoNo *novo, *anterior, *atual;
 if ((pos<0)||(pos>=L->numelem))
 erro=1;
 else{
 novo=(tipoNo*)malloc(sizeof(tipoNo));
 if(novo==NULL)
 erro=2;
 else{
 novo->elem=e;
 if(pos==0){
 novo->proximo=L->inicio->proximo;
 L->inicio=novo;
 if(L->numelem==1)
 L->fim=novo;
 }else if(pos==L->numelem){
 L->fim->proximo=novo;
 novo->proximo=NULL;
 L->fim=novo;
 }else{
 anterior=NULL;
 atual=L->inicio->proximo;
 cont=0;
 while(cont<pos){
 anterior=atual;
 atual=atual->proximo;
 cont++;
 }
 novo->proximo=atual;
 anterior->proximo=novo;
 }
 (L->numelem)++;
 if(L->numelem==1)
 L->maior=e;
 else
 if(e>L->maior)
 L->maior=e;
 }
 }
 return erro; 
} 
int removelista(tipolista *L, int pos){
 tipoNo *anterior, *atual;
 int cont=0, erro=0;
 tipoelemento removido;
 if((pos<0)||(pos>L->numelem))
 erro=1;
 else if(L->numelem==0)
 erro=2;
 else{
 anterior=NULL;
 atual=L->inicio;
 cont=0;
 while(cont<pos){
 anterior=atual;
 atual=atual->proximo;
 cont++;
 }
 removido=atual->elem;
 if(pos==0)
 L->inicio=atual->proximo;
 else{
 anterior->proximo=atual->proximo;
 if(pos=L->numelem-1)
 L->fim=anterior;
 }
 free(atual);
 (L->numelem)--;
 if(removido==L->maior){
 L->maior=L->inicio->elem;
 atual=L->inicio->proximo;
 while(atual!=NULL){
 if(atual->elem>L->maior)
 L->maior=atual->elem;
 atual=atual->proximo;
 }
 }
 } 
 return erro; 
}
void imprime(tipolista L){
 tipoNo *atual;
 atual=L.inicio;
 if(atual==NULL)
 printf("\nLista vazia");
 else{ 
 while(atual!=NULL){
 printf("%d ", atual->elem);
 atual=atual->proximo;
 } 
 } 
} 
int main(int argc, char *argv[])
{
 int opcao,posi,posx;
 tipoelemento x;
 tipolista L1;
 do{
 printf(" 1 para inserir \n");
 printf(" 2 para remover \n");
 printf(" 3 para ver \n");
 printf(" 4 para fazer lista vazia \n");
 printf(" 5 para sair \n");
 scanf("%d", &opcao);
 
 switch(opcao){
 case 1:
 printf(" digite a posição que voce deseja inserir\n");
 scanf("%d",&posi);
 printf(" digite o elemento a ser inserido\n");
 scanf("%d",&x);
 insere(&L1,posi,x);
 system("PAUSE >> null");
 break;
 case 2:
 printf(" digite a posição que voce deseja remover\n");
 scanf("%d",&posx);
 removelista(&L1,posx);
 system("PAUSE >> null");
 break;
 case 3:
 imprime(L1);
 system("PAUSE >> null");
 break;
 case 4:
 fazvazia(&L1);
 break;
 case 5:
 system("PAUSE >> null");	
 return 0; 
 break;
 }
 system("cls"); 
 }while(opcao!=5); 
 
 
}

Teste o Premium para desbloquear

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

Outros materiais