Você está aqui: C ::: Estruturas de Dados ::: Lista Ligada Simples |
Como inserir nós na posição n de uma lista ligada simples em CQuantidade de visualizações: 721 vezes |
|
Nesta dica eu mostrarei um código C completo mostrando como podemos inserir um novo nó em uma determinada posição de uma lista encadeada simples. Note o uso das funções criar_lista(), inserir_no_posicao_n() e exibir_lista(). Para a demonstração eu usei uma estrutura No com apenas um valor inteiro e um ponteiro para o próximo elemento da lista. Após o entendimento do código você poderá modificar a estrutura No para o problema que você deseja resolver. Veja o código C completo para o exemplo: ----------------------------------------------------------------------
Se precisar de ajuda com o código abaixo, pode me chamar
no WhatsApp +55 (62) 98553-6711 (Osmar)
----------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
// estrutura que representa os nós da lista
struct No{
// variável que guarda o valor do nó
int valor;
// aponta para o próximo nó da lista
struct No *proximo;
} *inicio;
// cabeçalhos das funções usadas neste exemplo
void criar_lista(int quant_nos);
void inserir_no_posicao_n(int valor, int posicao);
void exibir_lista();
// função principal do programa
int main(int argc, char *argv[]){
// variáveis que serão usadas no programa
int quantidade, posicao, valor;
setlocale(LC_ALL,""); // para acentos do português
// vamos pedir para o usuário informar a quantidade de nós
// na lista ligada
printf("Informe a quantidade de nós: ");
scanf("%d", &quantidade);
// chama a função que cria a lista ligada
criar_lista(quantidade);
// exibe os nós da lista ligada
exibir_lista();
// vamos pedir para o usuário informar a posição do novo nó
printf("\n\nInforme a posição do novo nó: ");
scanf("%d", &posicao);
printf("Informe o valor do novo nó: ");
scanf("%d", &valor);
// chama a função que insere na posição n
inserir_no_posicao_n(valor, posicao);
// exibe os nós da lista ligada novamente
exibir_lista();
printf("\n\n");
system("PAUSE");
return 0;
}
// função que permite exibir os nós na lista ligada
void exibir_lista(){
// criamos um nó temporário
struct No *temp;
// a lista está vazia?
if(inicio == NULL){
printf("\nA lista está vazia\n");
}
else{
printf("\nOs nós na lista ligada são:\n\n");
// apontamos para o primeiro nó da lista
temp = inicio;
// enquanto início for diferente de vazia
while(temp != NULL){
// mostramos o valor do nó atual
printf("%d ", temp->valor);
// e saltamos para o nó seguinte
temp = temp->proximo;
}
}
}
// função que permite criar a lista ligada
void criar_lista(int quant_nos){
// decara o novo nó e o nó temporário
struct No *novo_no, *temp;
// valor do nó e a variável de controle do laço
int valor, i;
// o primeiro passo é alocar memória para o nó inicial da lista
inicio = (struct No*)malloc(sizeof(struct No));
// a memória foi alocada com sucesso?
if(inicio == NULL){
printf("\nNão foi possível alocar memória para o nó.\n");
}
else{
// vamos pedir para o usuário informar o valor para o
// primeiro nó da lista
printf("Informe o valor para o Nó 1: ");
scanf("%d", &valor);
// preenchemos o valor do nó
inicio->valor = valor;
// o nó inicial não aponta para nenhum outro até o momento
inicio->proximo = NULL;
// agora fazemos o nó temporário apontar para o nó inicial
temp = inicio;
// criamos os demais nós e os adicionamos na lista ligada
for(i = 2; i <= quant_nos; i++){
// alocamos memória para o novo nó
novo_no = (struct No*)malloc(sizeof(struct No));
// testamos se a memória foi alocada com sucesso
if(novo_no == NULL){
printf("\nNão foi possível alocar memória para o novo nó.\n");
break;
}
else{
// pedimos para o usuário informar o valor do novo nó
printf("Informe o valor para o nó %d: ", i);
scanf("%d", &valor);
// guardamos o valor no novo nó
novo_no->valor = valor;
// o novo nó não está apontando para nenhum outro por enquanto
novo_no->proximo = NULL;
// o nó temp aponta para o próximo nó
temp->proximo = novo_no;
// e temp passa a ser o nó recém inserido
temp = temp->proximo;
}
}
// mostramos uma mensagem de sucesso
printf("\nA lista ligada foi criada com sucesso.\n");
}
}
// função que permite inserir um nó em uma determinada
// posição da lista ligada
void inserir_no_posicao_n(int valor, int posicao){
// para controlar o laço
int i;
// para o novo nó e o nó temporário
struct No *novo_no, *temp;
// alocamos memória para o novo nó
novo_no = (struct No*)malloc(sizeof(struct No));
// testamos se a memória foi alocada com sucesso
if(novo_no == NULL){
printf("\nNão foi possível alocar memória para o novo nó.\n");
}
else{
// guardamos o valor no novo nó
novo_no->valor = valor;
// o novo nó não está apontando para nenhum outro por enquanto
novo_no->proximo = NULL;
// agora apontamos temp para o início da lista
temp = inicio;
// e percorremos a lista até encontrar a posição desejada
for(i = 2; i <= posicao - 1; i++){
// apontamos para o próximo nó do nó atual
temp = temp->proximo;
// saímos do laço se chegarmos ao fim da lista
if(temp == NULL){
break;
}
}
// encontramos a posição desejada?
if(temp != NULL){
// o novo nó aponta para o próximo do nó temporário
novo_no->proximo = temp->proximo;
// e o próximo do temporário agora aponta para o novo nó
temp->proximo = novo_no;
// finalmente mostramos uma mensagem de sucesso
printf("\nNovo nó inserido com sucesso.\n");
}
else{
printf("\nNão foi possível inserir na posição informada\n");
}
}
}
Ao executar este código C nós teremos o seguinte resultado: Informe a quantidade de nós: 4 Informe o valor para o Nó 1: 34 Informe o valor para o nó 2: 21 Informe o valor para o nó 3: 40 Informe o valor para o nó 4: 17 A lista ligada foi criada com sucesso. Os nós na lista ligada são: 34 21 40 17 Informe a posição do novo nó: 3 Informe o valor do novo nó: 58 Novo nó inserido com sucesso. Os nós na lista ligada são: 34 21 58 40 17 |
|
|
Desafios, Exercícios e Algoritmos Resolvidos de C |
Veja mais Dicas e truques de C |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





