Jump to content

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);
}

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By 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(); }  
    • By 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á ♡ !
    • By 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!
    • By 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;
    • By Luciano-web
      Boa tarde,
      Este é meu primeiro tópico aqui no fórum, estou iniciando os estudos em Árvore Binária de Pesquisa (Busca) e estou com dificuldades na inserção e impressão dos números (chaves) na tela depois de inseridos os números.
      --
      Alguma sugestão? é a declaração da RAIZ? é a função de inserção?
      Na verdade não aparece nada quando chamo as funções de impressão, eu já "testei" a RAIZ antes de chamar a função de impressão e ela está "zerada"
      --
      Segue o código abaixo, se alguém tiver um "caminho" para eu seguir eu agradeço!
      --
      #include <stdio.h> #include <stdlib.h> typedef struct arvore{ int valor; struct arvore *dir, *esq; } arvore; void insere(arvore *raiz, int valor){ if (raiz == NULL){ arvore *aux; aux = malloc (sizeof (arvore)); aux->valor = valor; aux->dir = NULL; aux->esq = NULL; raiz = aux; } else if (valor > raiz->valor) insere (raiz->dir, valor); else if (valor < raiz->valor) insere (raiz->esq, valor); else printf ("Elemento ja existe na arvore\n"); } void em_ordem(arvore *raiz){ // esquerda / raiz / direita if (raiz != NULL){ em_ordem(raiz->esq); printf("%d ", raiz->valor); em_ordem(raiz->dir); } } void pre_ordem(arvore *raiz){ // raiz / esquerda / direita if (raiz != NULL){ printf("%d ", raiz->valor); pre_ordem(raiz->esq); pre_ordem(raiz->dir); } } void pos_ordem(arvore *raiz){ // esquerda / direita / raiz if (raiz != NULL){ pos_ordem(raiz->esq); pos_ordem(raiz->dir); printf("%d ", raiz->valor); } } void main(){ arvore *raiz; raiz = NULL; insere(raiz, 10); insere(raiz, 8); insere(raiz, 12); insere(raiz, 5); insere(raiz, 11); printf("\n>> IMPRESSAO\n====================================================="); printf("\n---------------------------------------\n EM ORDEM: "); em_ordem(raiz); printf("\n---------------------------------------\n PRE ORDEM: "); pre_ordem(raiz); printf("\n---------------------------------------\n POS ORDEM: "); pos_ordem(raiz); printf("\n---------------------------------------\n"); }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.