Vous êtes sur la page 1sur 4

I - LABORATÓRIO ECO013

#include <stdio.h>
#include <stdlib.h>
#define MAX 10000

typedef int telem;

typedef struct {
telem v[MAX];
int n;
}tlista;

// Criar uma lista vazia


void criar (tlista *L);
// Verificar se uma lista está vazia
int vazia (tlista L);
// Verificar se uma lista está cheia
int cheia (tlista L);
// Obter o tamanho de uma lista
int tamanho (tlista L);
// Obter o i-ésimo elemento de uma lista
int elemento (tlista L, int pos, telem *dado);
// Pesquisar um dado elemento, retornando a sua posição
int posicao (tlista L, telem dado);
// Inserção de um elemento em uma determinada posição
int inserir (tlista *L, int pos, telem dado);
// Remoção do elemento de uma determinada posição
int remover (tlista *L, int pos, telem *dado);
// Remoção do elemento de uma determinada posição
int esvaziar (tlista *L);
// Menu
int menu ();

int main(){
tlista L;
int cont, pos, tam;
int dado;
char opt;

// a)
criar (&L); //passagem por referência

do{
// d)
printf("\n");
switch (menu()) {
case 49:
tam = tamanho(L);
printf("\nTAMANHO: %d\n", tam);
for (cont = 0; cont < (tam); cont++)
printf("L.v[%d]=%d ",
(cont+1),L.v[cont]);
printf("\n");
break;
case 50:
printf ("\nDigite a posicao: ");
scanf("%d",&pos);
printf ("\nDigite o dado: ");
scanf("%d", &dado);
if(inserir (&L, pos, dado) == 1)
printf ("\nInserido");
else
printf ("\nNão inserido");
break;
case 51:
printf ("\nDigite a posicao: ");
scanf("%d",&pos);
if(remover (&L, pos, &(L.v[pos])) == 1)
printf ("\nRemovido");
else
printf ("\nNao removido");
break;
case 52:
printf ("\nDigite a posicao: ");
scanf("%d",&pos);
if(elemento (L, pos, &(L.v[pos])))
printf("\nElemento da posição escolhida:
%d", L.v[pos]);
break;
case 53:
printf ("\nDigite o dado: ");
scanf("%d", &dado);
printf("Posicao: %d", posicao (L, dado));
break;
case 54:
do {
printf("\nTem certeza que quer esvaziar a
lista? (1 - sim | 0 - nao)");
opt = getch();
if ((opt!='1')&&(opt!='0'))
printf("\nInvalido...\n");
} while ((opt!='1')&&(opt!='0'));
if (opt == '1'){
if (esvaziar(&L))
printf("\nLista esvaziada...\n");
}
break;
case 27:
return 0;
break;
}
do {
printf("\nContinuar? (1 - sim | 0 - nao)");
opt = getch();
if ((opt!='1')&&(opt!='0'))
printf("\nInvalido...\n");
} while ((opt!='1')&&(opt!='0'));
}while(opt==49);
return 0;
}

// Criar uma lista vazia


void criar (tlista *L) {
L->n = 0;
}

// Verificar se uma lista está vazia


int vazia (tlista L) {
return (L.n == 0);
}

// Verificar se uma lista está cheia


int cheia (tlista L) {
return (L.n == MAX);
}

// Obter o tamanho de uma lista


int tamanho (tlista L) {
return (L.n);
}

// Obter o i-ésimo elemento de uma lista


int elemento (tlista L, int pos, telem *dado) {
/* O parâmetro dado irá receber o elemento encontrado */
/* Retorna 0 se a posição for inválida. Caso contrário, retorna
1 */
if ( (pos > L.n) || (pos <= 0))
return (0);
*dado = L.v[pos-1];
return (1);
}

// Pesquisar um dado elemento, retornando a sua posição


int posicao (tlista L, telem dado) {
/* Retorna a posição do elemento ou 0 caso não seja encontrado
*/
int i;
for (i=1; i<=L.n; i++)
if (L.v[i-1] == dado)
return (i);
return (0);
}

// Inserção de um elemento em uma determinada posição


// Requer o deslocamento à direita dos elementos v(i+1)...v(n)
int inserir (tlista *L, int pos, telem dado) {
/* Retorna 0 se a posição for inválida ou se a lista estiver
cheia */
/* Caso contrário, retorna 1 */
int i;
if ( (L->n == MAX) || (pos > L->n + 1) )
return (0);

for (i=L->n; i>=pos; i--)


L->v[i] = L->v[i-1];

L->v[pos-1] = dado;
(L->n)++;
return (1);
}

// Remoção do elemento de uma determinada posição


// Requer o deslocamento à esquerda dos elementos v(p+1)...v(n)
int remover (tlista *L, int pos, telem *dado) {
/* O parâmetro dado irá receber o elemento encontrado */
/* Retorna 0 se a posição for inválida. Caso contrário, retorna
1 */
int i;
if ( (pos > L->n) || (pos <= 0) )
return (0);

*dado = L->v[pos-1];

for (i=pos; i<=(L->n)-1; i++)


L->v[i-1] = L->v[i];

(L->n)--;
return (1);
}

// Esvazia a lista
int esvaziar (tlista *L){
(L->n) = 0;
return 1;
}

// Menu
int menu () {
char c;

// b)
printf("\n\n######## EDITOR DE LISTAS ########\n\n");
do {
printf("\n1 - EXIBIR LISTA");
printf("\n2 - INSERIR");
printf("\n3 - REMOVER");
printf("\n4 - EXIBIR ELEMENTO");
printf("\n5 - EXIBIR POSICAO");
printf("\n6 - ESVAZIAR");
printf("\nESC - SAIR\n");

printf("\nDigite sua opcao\n\n");


// c)
c = getch();
if (((c<48)||(c>54))&&(c!=27)){
printf("\nOpcao invalida.\n");
}
}while(((c<49)||(c>54))&&(c!=27));

return (int)c;
}