Ir ao conteúdo
  • Cadastre-se

C++ Alguém poderia me ajudar com está função?


jug

Posts recomendados

Uma função que adiciona um novo elemento em um índice qualquer da lista. O índice é um inteiro que
especifica a posição na lista onde deverá ser adicionado o novo elemento. O índice 0 especifica a primeira
posição (logo após a cabeça). Caso o valor do índice seja maior que o número de elementos atualmente na
lista, deve inserir ao final da lista.

Alguém poderia me ajudar com está função?

 

void insereIndice(Item *cabeca, int indice, int val){
    int i;
    Item *nov = (Item*) malloc(sizeof(Item));
    nov->pro = NULL;
    nov->val = valor;
    Item *atual = cabeca;
    while(atual->pro!=NULL){
        atual = atual->pro;    
    }
    atual->pro = nov;
  }

 

Link para o comentário
Compartilhar em outros sites

@devair1010 é que só coloquei a função, não o código inteiro

Aqui é ele inteiro 

 

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
struct ElementoLista{
    int valor;
    struct ElementoLista *pro;
};
typedef struct ElementoLista Item;

int numeroElementos(Item *cabeca);
void insereFim(Item* cabeca, int valor);
int contagem(Item *cabeca);
double media(Item *cabeca);
void insereIndice(Item *cabeca, int indice, int valor);

int main(){
    Item cabeca;

    cabeca.pro = NULL;
    printf("Tamanho do item: %d\n",sizeof(Item));
    printf("\nInserindo itens novos na lista...\n"); 
    insereFim(&cabeca, 150);
    insereFim(&cabeca, 100);
    insereFim(&cabeca, 200);
    insereFim(&cabeca, 10);
    insereFim(&cabeca, 20);
    insereFim(&cabeca, 30);
    insereFim(&cabeca, 50);
    printf("Total de itens na lista: %d\n",numeroElementos(&cabeca));
    printf("Total de itens que sao maiores ou igual a 100 da lista: %d\n",contagem(&cabeca));
    printf("Soma Total de itens na lista: %lf\n",media(&cabeca));

}
void insereFim(Item* cabeca, int valor){
    int i;
    Item *nov = (Item*) malloc(sizeof(Item));
    nov->pro = NULL;
    nov->valor = valor;
    printf("Item de valor %3d alocado no endereco: 0x%000000X\n",nov->valor,nov);
    Item *atual = cabeca;
    while(atual->pro!=NULL){
        atual = atual->pro;
    }
    atual->pro = nov;
}
int numeroElementos(Item *cabeca){
    int i;
    Item *atual = cabeca->pro;
    while(atual!=NULL){
        i++;
        atual= atual->pro;
    }
    return i;
}
int contagem(Item *cabeca){
    int i;
    Item *atual = cabeca->pro;
    while((atual!=NULL)){
        if((atual->valor) >= 100){
            i++;
        }
        atual= atual->pro;
    }
    return i;    
}
double media(Item *cabeca){
    double i,soma;
    Item *atual = cabeca->pro;
    while(atual!=NULL){
        i++;
        soma = soma + atual->valor;
        atual = atual->pro;
    }
    return soma/i;
}
void insereIndice(Item *cabeca, int indice, int valor){
    int i;
    Item *nov = (Item*) malloc(sizeof(Item));
    nov->pro = NULL;
    nov->valor = valor;
    Item *atual = cabeca;
    while(atual->pro!=NULL){
        atual = atual->pro;    
    }
    atual->prx = nov;
}

Link para o comentário
Compartilhar em outros sites

3 horas atrás, jug disse:

Alguém poderia me ajudar com está função?

Essa não é uma função útil para uma lista. Não tem em java nem em C++. Essas são linguagens comuns que oferecem listas, Se fosse importante fazer isso com a estrutura se usaria um array, que é muito, mas muito mais rápido.

 

Mas um exercício é um exercício.

 

Imagino que você tenha escrito uma função que mostra na tela o que tem na lista. É a primeira que deve escrever, mesmo antes de criar a linked list. E a razão é simples: sem uma função de confiança que mostra o que tem na lista como vai testar o programa?

 

Assim apenas copie essa função e mude o nome para essa que insere na posição N. E altere o simples: ao listar o n-ésimo cara é óbvio que está com o endereço dele na sua frente então você insere o cara usando o mesmo código da função que insere, que obviamente você já deve ter escrito.

 

Sobre seu programa

 

Seu programa não está bom. Esse que usou é um caminho comum, mas difícil e minimamente produtivo para programar listas ou qualquer estrutura de dados.

 

Uma estrutura abstrata de dados, o nome completo disso, é um container de dados, uma coleção. E cada elemento, muitas vezes chamado nó, é uma estrutura e tem uma chave para poder comparar uma com a outra. Tipo uma lista ligada de alunos tem nós. Cada nó tem um aluno e você compara os alunos pelo código de matrícula, por exemplo.

 

Então uma lista tem nós. Nós não são a lista. A lista não é um nó. DENTRO de cada nó tem um dado. E dentro de cada dado tem uma chave, como o exemplo que te mostrei. 

 

Esse é o lance de listas, mapas, pilhas, conjuntos e tal. E se você não programar assim vai ter um trabalho danado TODA vez que for usar uma lista. Não é assim.

 

Não use void. Retorne algo. Em especial no caso da lista do modo como escreveu, RETORNE o endereço de início dela porque pode mudar e você vai perder tudo...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!