Preciso de uma ajuda para descobrir o erro, se puderem também aceito material de estudo, o que acontece é que eu já rodei esse código de cima a baixo e ele continua dando problema na função:
Buscar: mesmo quando não existe o valor ele retorna uma posição;
Excluir: ele não exclui o valor quando ele está na primeira posição;
Excluir tudo: após usar quando peço para imprimir o programa dá erro
#include<stdio.h>
#include<stdlib.h>
//criação da lista - recebe um inteiro e tem um ponteiro
//*ini é o ponteiro inicial (um ponteiro que aponta para outro ponteiro)
struct No{
int dado;
struct No *prox;
} *ini=NULL;
void inserir_ini(int num){
struct No *novo; // nova estrutura com características de No
novo = malloc(sizeof(No())); //pegar um espaço de memoria
novo->dado=num; //informação de novo agora é num
novo->prox=ini; //ponteiro de novo aponta para ini (primeiro da lista) último da lista
ini=novo; // ponteiro de ini aponta para novo
}
void inserir_fim(int num){
struct No *aux =ini, *novo; // novo ponteiro e nova estrutura com características de No
novo = malloc(sizeof(No())); //pegar um espaço de memoria
novo->dado=num; //informação de novo agora é num
novo->prox=NULL; //ponteiro de novo aponta para NULL
if(aux==NULL){
ini=novo; //se não tinha nada na lista, ini apontava para null, logo aux aponta para null, nesse caso ini vai apontar para o primeiro da lista
}
else{
while(aux->prox !=NULL){
aux=aux->prox;
}
aux->prox=novo; //procura o último da lista e conecta o novo nele
}
}
void imprimir(){
struct No*novo; //criou um ponteiro igual ao no
if (ini == NULL)
{
printf("--- fim da lista ---\n\n");
return;
}
novo = ini;
while (novo !=NULL) {
printf("Info = %d\n",novo->dado);
novo = novo->prox;
}
printf("--- fim da lista ---\n\n");
}
Pergunta
Carol Alves
Olá pessoal, tudo bem?
Preciso de uma ajuda para descobrir o erro, se puderem também aceito material de estudo, o que acontece é que eu já rodei esse código de cima a baixo e ele continua dando problema na função:
Buscar: mesmo quando não existe o valor ele retorna uma posição;
Excluir: ele não exclui o valor quando ele está na primeira posição;
Excluir tudo: após usar quando peço para imprimir o programa dá erro
#include<stdio.h>
#include<stdlib.h>
//criação da lista - recebe um inteiro e tem um ponteiro
//*ini é o ponteiro inicial (um ponteiro que aponta para outro ponteiro)
struct No{
int dado;
struct No *prox;
} *ini=NULL;
void inserir_ini(int num){
struct No *novo; // nova estrutura com características de No
novo = malloc(sizeof(No())); //pegar um espaço de memoria
novo->dado=num; //informação de novo agora é num
novo->prox=ini; //ponteiro de novo aponta para ini (primeiro da lista) último da lista
ini=novo; // ponteiro de ini aponta para novo
}
void inserir_fim(int num){
struct No *aux =ini, *novo; // novo ponteiro e nova estrutura com características de No
novo = malloc(sizeof(No())); //pegar um espaço de memoria
novo->dado=num; //informação de novo agora é num
novo->prox=NULL; //ponteiro de novo aponta para NULL
if(aux==NULL){
ini=novo; //se não tinha nada na lista, ini apontava para null, logo aux aponta para null, nesse caso ini vai apontar para o primeiro da lista
}
else{
while(aux->prox !=NULL){
aux=aux->prox;
}
aux->prox=novo; //procura o último da lista e conecta o novo nele
}
}
void imprimir(){
struct No*novo; //criou um ponteiro igual ao no
if (ini == NULL)
{
printf("--- fim da lista ---\n\n");
return;
}
novo = ini;
while (novo !=NULL) {
printf("Info = %d\n",novo->dado);
novo = novo->prox;
}
printf("--- fim da lista ---\n\n");
}
void buscar (int busca, struct No*ini){
int contador=1;
struct No *q;
q = ini;
while (q != NULL && q->dado != busca) {
q = q->prox;
contador=contador+1;
}
printf("O valor inserido está na posição %d",contador);
}
void alterar(int alvo, int alvo2, struct No*ini){
struct No *q;
q = ini;
while (q != NULL && q->dado != alvo) {
q = q->prox;
}
if (q != NULL) {
q->dado=alvo2;
}
}
void excluir(int alvo, struct No*ini){
struct No *p,*q;
p=ini;
q=ini->prox;
if (q->dado==alvo)
while (q != NULL && q->dado != alvo) {
p = q;
q = q->prox;
}
if (q != NULL) {
p->prox = q->prox;
free (q);
}
}
void excluirtudo(struct No*ini){
struct No *aux;
while (ini!= NULL) {
aux = ini;
ini=aux->prox;
free(aux);
}
ini->prox=NULL;
}
int main(){
int op=1, num, num2,busca;
while (op!=0){
printf("\n\nMenu \n1-Insere no inicio; \n2-Insere no fim; \n3-Imprime; \n4-Buscar \n5-Alterar \n6-Excluir um \n7-Excluir tudo \n0-Finaliza \n\n Digite a opcao: ");
scanf("%d", &op);
switch(op){
case 1:
printf("\nInsira um numero: ");
scanf("%d",&num);
inserir_ini(num);
break;
case 2:
printf("\nInsira um numero: ");
scanf("%d",&num);
inserir_fim(num);
break;
case 3:
imprimir();
break;
case 4:
printf("Insira o numero que deseja buscar:");
scanf("%d",&busca);
buscar(busca,ini);
break;
case 5:
printf("\nInsira o numero que deseja substituir: ");
scanf("%d",&num);
printf("\nInsira o novo numero: ");
scanf("%d",&num2);
alterar(num,num2, ini);
break;
case 6:
printf("\nInsira o numero que deseja excluir: ");
scanf("%d",&num);
excluir(num, ini);
break;
case 7:
excluirtudo(ini);
printf("\nLista deletada.");
break;
}
}
}
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.