Bom dia pessoal estou no 1º ano do curso de Ciência da Computação e estou com muitas dúvidas nas aulas de estrutura de dados =/. O professor me passou o exercicio de uma lista em C, só que eu não estou entendendo o código dele para inserir valor na lista. Vou postar o código para vocês verem:
#include <iostream>
#include <string.h>
#include <conio.h>
using namespace std;
#define tam_max 10
typedef int LISTA[tam_max];
int inserir_antes (LISTA l, int tam, int pos, int &fim, int valor);
int acessar_lista (LISTA l, int tam, int pos, int fim, int &valor);
int remover_lista (LISTA l, int tan, int pos, int &fim, int &valor);
int altera_lista (LISTA l, int tam, int pos, int fim, int nvalor);
void mostrar_lista (LISTA l, int fim);
int main()
{
LISTA minhalista;
int valor, final = 0, posicao,r;
char op;
do
{
system("cls");
mostrar_lista (minhalista, final);
puts ("\n\nMenu principal");
puts ("\n\nEscolha a operacao que deseja realizar:");
puts ("\n\n1- Inserir valor:");
puts ("\n\n2- Acessar valor de uma posicao:");
puts ("\n\n3- Alterar valor de uma posicao");
puts ("\n\n4- Remover posicao:");
puts ("\n\n5- Sair\n\nDigite a opcao:");
op = getchar();
switch (op)
{
case '1': puts ("\n\nDigite o valor (inteiro) a inserir: ");
scanf ("%d",&valor);
fflush(stdin);
puts ("\n\nDigite a posicao em que deseja inserir: ");
scanf ("%d",&posicao);
fflush(stdin);
r=inserir_antes(minhalista, tam_max, posicao-1, final, valor);
if (r==1) puts ("\n\nValor inserido com sucesso!");
else puts ("\n\nERRO NA INSERCAO!");
getchar();
break;
case '2': puts ("\n\nDigite a posicao a ser acessada: ");
scanf ("%d",&posicao);
fflush(stdin);
r=acessar_lista(minhalista, tam_max, posicao-1, final, valor);
if (r==1) printf ("\n\nValor %d encontrado na posicao %d da lista.", valor, posicao);
else puts ("\n\nERRO NO ACESSO!");
getchar();
break;
case '3': puts ("\n\nDigite o valor (inteiro) a ser alterado: ");
scanf ("%d",&valor);
fflush(stdin);
puts ("\n\nDigite a posicao em que deseja alterar: ");
scanf ("%d",&posicao);
fflush(stdin);
r=altera_lista(minhalista, tam_max, posicao-1, final, valor);
if (r==1) printf ("\n\nValor da posicao %d alterado com sucesso para %d.", posicao, valor);
else puts ("\n\nERRO NA ALTERAÃ?Ã?O!");
getchar();
break;
case '4': puts ("\n\nDigite a posicao em que deseja remover: ");
scanf ("%d",&posicao);
fflush(stdin);
r=remover_lista(minhalista, tam_max, posicao-1, final, valor);
if (r==1) printf ("\n\nValor %d removido com sucesso!", valor);
else puts ("\n\nERRO NA REMOÃ?Ã?O!");
getchar();
break;
}
} while (op!='5');
}
void mostrar_lista (LISTA l, int fim)
{
puts ("\n\nSITUACAO DA LISTA\n\n");
for (int i = 0; i < fim; i++)
printf ("%d ", l[i]);
if (fim == 0) puts ("Lista Vazia");
puts ("\n");
}
int inserir_antes (LISTA l, int tam, int pos, int &fim, int valor)
{
int ret, i;
if (fim < tam)
{
if (pos < 0 || pos > fim)
{
puts ("\n\nPosicao Invalida para a insercao\n\n");
ret=0;
}
else
{
for (i=fim; i>pos; i--)
l[i]=l[i-1];
l[pos]=valor;
fim++;
ret =1;
}
}
else
{
puts ("\n\nLista Cheia\n\n");
ret = 0;
};
return (ret);
}
int acessar_lista (LISTA l, int tam, int pos, int fim, int &valor)
{
int ret, i;
if (pos < 0 || pos >= fim)
{
puts ("\n\nPosicao Invalida para acesso\n\n");
ret=0;
}
else
{
valor=l[pos];
ret =1;
}
return (ret);
}
int altera_lista (LISTA l, int tam, int pos, int fim, int nvalor)
{
int ret, temp;
if (pos < 0 || pos >= fim)
{
puts ("\n\nPosicao Invalida para alteracao\n\n");
ret=0;
}
else
{
l[pos]=nvalor;
ret =1;
}
return (ret);
}
int remover_lista (LISTA l, int tam, int pos, int &fim, int &valor)
{
int ret, i;
if (pos < 0 || pos >= fim)
{
puts ("\n\nPosicao Invalida para remocao\n\n");
ret=0;
}
else
{
valor=l[pos];
for (i=pos; i<fim-1; i++)
l[i]=l[i+1];
fim--;
ret=1;
}
return (ret);
Pelo que eu entendi nas explicações, quando vamos inserir um valor na lista e ela ja está preenchida na posição que queremos adicionar o valor, é necessário alocar os valores depois da posição que será inserido o valor para a direito, e a função de remover valores fará com que os valores depois da posição removida serem alocados para a esquerda. Porém pelo código que o professor passou ele criou um for com um incremento e eu não consigo entender como esse for irá parar.
Alguem pode me explicar a funcão para inserir na lista?
Desde já agradeço.