Baixe o app para aproveitar ainda mais
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); }
Compartilhar