Ir para conteúdo

Recommended Posts

Boa tarde gostaria de entender porque o codigo abaixo não funciona corretamente, alguem poderia me informar ??  LINK para por para rodar : https://repl.it/@JulianaMaria/Questao-1

 

/* Escrever um Pseudocódigo de inserção em uma lista encadeada ordenada. */

#include <stdio.h>
#include <stdlib.h>

typedef  struct  Dados {
	int numero;
	struct Dados * proximo;
}No;

void imprime (No * lista){
	printf("\n Lista = ");
	while(lista->proximo != NULL){
		printf(" %d ",lista->numero);
		lista = lista->proximo;
	}
	printf("\n");
}

No * inserir_ordenado(int valor, No * inicio_lista){
	No * percorrer_lista, * novo_no, *l;
	percorrer_lista = (No*)malloc(sizeof(No));
	novo_no = (No*)malloc(sizeof(No));
	percorrer_lista = inicio_lista;
	novo_no->numero = valor;
	int cont = 0;
	while((percorrer_lista->numero < valor)&&(percorrer_lista->proximo != NULL)){
		percorrer_lista = percorrer_lista->proximo;
		cont++;
	}
	//inserir fim
	if((percorrer_lista->proximo == NULL)&&(cont != 0)){
		percorrer_lista->proximo = novo_no;
		novo_no->proximo = NULL;
	}else{
		//inserir inicio
		if(cont == 0){
			novo_no->proximo = percorrer_lista;
		}
		//inserir meio
		else{
			novo_no->proximo = percorrer_lista->proximo;
			percorrer_lista->proximo = novo_no;
		}
	}
	return inicio_lista;
}

int main (){
	No * lista, * pt;
	int valor,op = 1;
	pt = lista;

	lista->numero = 10;
	lista->proximo = NULL;
	
	while(op == 1){
	printf("\n Digite valor para inserir na lista : ");
	scanf("%d",&valor);

 	lista = inserir_ordenado(valor,pt);

	printf("\n Deseja inserir outro valor ? [Digite 1 para sim e outro valor para nao] = ");
	scanf("%d",&op);
	}
	imprime(pt);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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

  • Conteúdo Similar

    • Por juliaKrunker
      1- O comando typedef pode ser utilizado para criar novos comandos, ou simplesmente novas formas de escrever
      determinados comandos em linguagem C. Por exemplo, toda vez que você quiser criar uma variável do tipo struct
      declarado acima, terá que escrever o nome completo do tipo, isto é struct lista. Usando o comando typedef, defina um
      tipo alternativo, chamado Lista, que possa ser usado em lugar de struct lista.

      2-  Usando o tipo Lista que você criou na questão 3, declare uma variável chamada myList que possa ser utilizada para
      construir uma lista encadeada.
       
      3- (0,5) Usando o tipo Lista que você criou na questão 3, declare uma variável chamada novo que possa ser utilizada para criar
      um novo elemento para a lista declarada na questão 4.

      4- Escreva uma linha de código que aloque espaço na memória para a variável novo declarada na questão 5, de forma
      que a variável possa ser utilizada para inserir um novo elemento na lista myList declarada na questão 4.

      5 -Considerando a variável myList declarada na questão 4 e a variável novo declarada na questão 5 e alocada na questão
      6, atribua os valores 1 para o atributo id e 9.1 para o atributo valor e insira-a na lista myList.
       
      6- O trecho de código apresentado a seguir, refere-se a uma função que receberá como parâmetro um ponteiro para
      uma lista do tipo Lista e deverá calcular e retornar a média dos valores existentes na lista. Escreva o corpo da função.

    • Por alexkbw
      ola, preciso de ajuda
      estou aprendendo C++ 
      e nao consigo criar uma lista encadeada que armazene palavras
      segue o codigo:
       
      // listaEncadeada.cpp : Este arquivo contém a função 'main'. A execução do programa começa e termina ali. #include "pch.h" #include "conio.h" #include "string" #include<iostream> using namespace std; struct lista { char c; int n; struct lista*p; }; struct lista * inserirn(char,int); struct lista * prim; void inserir() { char c; int n; printf("\ninforme uma cor :"); scanf_s("%s", &c); printf("\ninforme um numero:"); scanf_s("%d", &n); inserirn(c,n); } struct lista * inserirn(char c,int n) { struct lista *novo, *aux; novo = (struct lista*)malloc(sizeof(struct lista)); if (novo!=NULL)//caso nao aja memoria { novo->n= n; novo->c = c; novo->p = NULL; if (prim==NULL) { prim = novo; } else { aux = prim; while (aux->p != NULL) { aux = aux->p; } aux->p = novo; } } return novo; } int main() { prim = NULL; inserir(); inserir(); inserir(); _getch(); }  
    • Por Pitag346
      Olá amigos, tudo bom?
      Preciso de uma dica/solução para meu projeto...
       
      Bom vamos pelo começo:
       
      1. Tenho um sistema de upload de arquivos onde faço o envio e registro no banco de dados o local do arquivo, nome e entre outros...
       
      2. Apenas administradores podem enviar e editar arquivos...
       
      3. Os usuários comuns são divididos em turmas, e em meu projeto existem 5 turmas e 2 períodos. (Manhã e Noite).
       
      Bom, o upload e as informações são simples de inserir no banco de dados
      Uso o mysqli para inserir os dados. 
       
      Antes do upload tenho um modal onde o administrador informa os dados e envia o arquivo, neste eu quero ter a liberdade de listar esse arquivo somente na turma em que o administrador selecionou nos checkboxs 
       
      Exemplo: Vou fazer o upload de 1 lista de exercícios do módulo 2, mas apenas as turmas 1 e 2 estão nesse módulo, ou seja o sistema não vai listar NO WHILE esse arquivo para a turma 3, 4 e 5... mas se eu quiser posso liberar para essas turmas quando eu quiser. Ou tbm posso remover das turmas 1 e 2 e apenas liberar para a turma 4... 
       
      Não faço ideia de como posso armazenar isso no banco de dados...
      Pensei em fazer os names dos checkbox's com array e depois separando com vírgulas os values, ficando da seguinte forma NO BANCO DE DADOS: 
       
      Turmas
      1, 2,
       
      Mas dentro do while na hora de exibição, utilizando explode não consigo fazer a comparação com a turma do usuário (armezado em session)...
       
      Espero que tenham entendido e se não for pedir muito, eu entendo muito pouco de php, se puderem me ajudar com exemplos parecidos com o meu problema, ficarei grato!
       
      Obrigado desde já ♡ !
    • Por Fah
      Boa Noite Pessoal!
      Estou com dificuldade em implementar um exercício de lista simplesmente encadeada.  Nele pede para criar uma estrutura com os dados de um aluno (matricula, nome e media), e outra para ser a lista (com a estrutura com os dados do aluno e um no com as informações do próximo nó). Uma das opções é para inserir os dados de um novo aluno em ordem crescente de matricula. O código está dando erro. Vocês conseguem me dizer onde estou errando? Vejam meu código:
       
      #include<stdio.h> #include<stdlib.h> #include<string.h> struct aluno{     int matricula;     char nome[100];     float media; }; typedef struct aluno Aluno; struct no{     Aluno* dados;     struct no* prox; }; typedef struct no No; No* cria(No* l){ No* p=(No*)malloc(sizeof(No)); p->dados=NULL; return l; } No* ins_ordenado(No* l,int mat,char* nome,float nota){     Aluno* Al=(Aluno*)malloc(sizeof(Aluno));     No* novo=(No*)malloc(sizeof(No));     int i=0;     Al->matricula=mat;     while(nome!='\0'){        Al->nome=nome;        i++;     }     Al->nome=NULL;     Al->media=nota;     novo->dados=Al;     No*p=l;     No*aux=NULL;     if(l==NULL){         novo->prox=l;         return novo;     }         while(p!=NULL&&p->dados->matricula<Al->matricula){               aux=p;               p=p->prox;         }         novo->prox=aux->prox;         aux->prox=novo;         if(p==NULL){             novo->prox=NULL;         }     return l; } void imprime(No* l){     No* p;     printf("turma 1:\n");     for(p=l;p!=NULL;p->prox){         printf("Matricula: %d\t Nome: %s Nota:%f\n",p->dados->matricula,p->dados->nome,p->dados->media);     }     printf("\n"); } int vazia(No* l){     return(l==NULL); } int main(){ No* l1=cria(l1); l1=ins_ordenado(l1,1,"Maria",5); printf("vazia? %d",vazia(l1)); //imprime(l1); return 0; }
       
      Desde já, Obrigada!
    • Por Thiago Medeiros_80190
      Pessoal, boa tarde!

      Estou analisando o código do Ziviani de lista encadeada. Alguém sabe me explicar o porque da necessidade de se usar o TipoCelula no início da estrutura e no final? Pergunto pois, se eu tiro do início ele da o erro "error: conflicting declaration 'typedef struct TipoCelula TipoCelula" e se eu tiro do final ele funciona perfeitamente. Ainda não conseguir pegar a ideia.

      Alguém poderia me auxiliar?

      typedef struct {
           int Chave; /* outros componentes */ } TipoItem;

      typedef struct TipoCelula *TipoApontador;

      typedef struct TipoCelula {
           TipoItem Item;      TipoApontador Prox; } TipoCelula;
      typedef struct {
           TipoApontador Primeiro, Ultimo; } TipoLista;
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.