startMiner - free and simple next generation Bitcoin mining software

sábado, 26 de dezembro de 2015

Lista Sequencial e funções

Lista Sequencial

Muita gente quando esta iniciando em C++ ou outra linguagem qualquer estruturada tem dificuldades com implementação das estruturas.
Então criei este post para ajudar a galera iniciando e servir também de apoio para aqueles que estão relembrando.

Implementação das funções

int menu(){
int opc;
cout<<"\nMenu";
cout<<"\n1- Inserir";
cout<<"\n2- Remover";
cout<<"\n3- Exibir";
cout<<"\n4- Sair";
cin>>opc;
return opc;
}

Função inserir final começa em -1 e usamos o final ++ para acrescentar uma posiçao para que o numero seja recebido nesta posição usando L[final]=num

void inserir(int L[], int num, int &final){
final++;
L[final] = num;
}

Cria-se uma variável aux para receber o valor que vai ser removido depois passa o valor da posição 0 para ele que sera o valor removido percorre -se a lista ate o final passando o numero da posição maior para a menor usa-se o final -- para remover a ultima posição e retorna o valor removido que estava armazenado em aux

int remover(int L[], int &final){
int aux;
aux = L[0];
for(int i=0; i<final; i++){
L[i]=L[i+1];
}
final--;
return aux;

}

Para exibir e simples percorre-se a lista da posição 0 ate a final

void exibir(int L[], int final){
for(int i=0; i<=final; i++)
cout<<"\nValor = "<<L[i]<<endl;
}

Busca sequencial  envia-se um numero para função a qual deseja-se verificar se existe na lista , percorre a lista do inicio ao fim comparando para ver se o numero e igual ao numero da posição que esta no loop caso sege igual retorne a posição do numero indicando que ele existe na lista

int busca(int L[], int num, int final){

for(int i=0; i<=final; i++){
if(L[i]==num){
return i;
}
}
}

Remover por posição ou numero mesmo procedimento de remover o primeiro da lista só que ao invés de passar a posição como 0 passamos a posição que desejamos 

int removerpos(int L[], int num, int &final){
int aux;
aux = L[num];
for(int i=num; i<=final; i++){
L[i]=L[i+1];
}
final--;
return aux;
}

Verificasse primeiro se a posição não e maior que o final, depois percorre a lista do final ate a posição desejada passando os números de cada posição a uma posição a frente depois acrescenta o numero na posição e ao final acrescenta mais uma posição no final da lista 

void inserirpos(int L[], int num, int pos, int &final){
if(pos>final)
L[final+1]=num;
else{
for(int i=final; i>=pos; i--){
L[i+1]=L[i];
}
L[pos]=num;
}
final++;
}

Media percorre-se a lista somando os valores e ao final divide pelo numeros de posições que contem a lista e retorna a media 
float media(int L[], int final){
float soma=0;
for(int i=0; i<=final; i++){
soma+=L[i];
}
return (soma/(final+1);
}

Feito as funções agora tem o main o meu eu fiz desse jeito abaixo cada um tem uma logica diferente não entrarei em muitos detalhes pois o mais importante são as funções explicadas acima em caso de duvidas postem a e 

const int MAX=6;
int main(){
int L[MAX];
int final = -1;
int opc, num;
do{
opc = menu();
switch(opc){
case 1://Inserir sem repetir
if(final<MAX-1)
cout<<"\nLista Cheia!";
else{
cout<<"\nDigite um numero = ";
cin>>num;
int pos=busca(L,num,final);
if(pos==-1)
inserir(L,num,final);
else
cout<<"\nNumero ja existe!";
}
break;

case 2://Remover
if(final==-1)
cout<<"\nLista Vazia!";
else{
cout<<"\nValor Removido = "<<remover(L,final);
}
break;

case 3://Exibir
if(final==-1)
cout<<"\nLista Vazia!";
else{

}
break;

case 4://Media
if(final==-1)
cout<<"\nLista vazia!";
else
cout<<"\nMedia = "<<media(L,final);
break;

case 5://Inserir em qualquer posição
if(final<MAX-1)
cout<<"\nLista Cheia!";
else{
cout<<"\nNumero = ";
cin>>num;
int pos=busca(L,num,final);
if(pos!=-1)
cout<<"\nNumero ja existe!";
else{
cout<<"\nEm qual posicao? ";
cin>>pos;
if(pos<0 || pos>=MAX)
cout<<"\nPosicao invalida!";
else
inserirpos(L,num,pos,final);
}
}
break;

case 6://Remover um valor de qualquer posição
if(final==-1)
cout<<"\nLista Vazia!";
else{
cout<<"\nPosicao = ";
cin>>num;
cout<<"\nValor removido = "<<removerpos(L,num,final);
}
break;

case 7://Exibir na posição específica
if(final==-1)
cout<<"\nLista Vazia!";
else{
cout<<"\nEntre com um numero para procurar = ";
cin>>num;
int pos=busca(L,num,final);
if(pos==-1)
cout<<"\nNumero nao encontrado!";
else
cout<<"\nNumerm encontrado na posicao = "<<pos;
}
break;

case 8://Sair
cout<<"\nSaindo!!";
break;

default: cout<<"\nOpcao Invalida!";
}


}while(opc!=8);
System("Pause");
return 0;
}

Nenhum comentário:

Postar um comentário