Ir para conteúdo
Fórum Script Brasil
  • 0

Lista encadeada com string


Matheus Engel

Pergunta

Por favor se alguém conseguir me ajudar com um trabalho da faculdade, preciso criar uma agenda de contatos com nome, numero e email. Já tenho uma parte da lista feita, mas ela possui apenas int, preciso adicionar string nela, ou seja, substituir int dado por char nome[50], char numero[15], char email[50]. Segue o código e o que devo fazer

 

Desenvolva um programa que emule as características de uma agenda de contatos em um celular. A lista deve conter as seguintes características: 1. (20% da nota) Deve-se ter uma lista de contatos de pessoas. Para criar esta lista utilize uma LISTA ENCADEADA. Deve-se armazenar o nome completo de cada pessoa, e-mail para contato e telefone celular. Para inserção dos dados, você pode criar uma leitura dos dados através de um menu na tela ou já deixá-los armazenados em um arquivo e só carregar este arquivo. Ou ambas soluções; 2. (20% da nota) Deve-se existir um menu na tela. Este menu deve permitir a inserção e remoção de novos contatos (caso optado pela inserção manual de dados) e a edição dos contatos já existentes. Deve-se também listar todos os contatos da lista e permitir sair do programa. A inserção de mais funções no menu fica a critério do aluno; 3. (30% da nota) Ao listar os contatos, dê para o usuário a opção de lista-los na ordem dos contatos cadastrados (ordem de inserção). Ao listar, liste todos os dados do usuário. Ao listar os contatos, dê para o usuário a opção de lista-los por ordem alfabética de nomes. O usuário também poderá escolher se deseja ordenar por nome de contatos (A-Z ou Z-A). Para a ordenação, utilize o MERGE SORT ou o QUICK SORT. A ordenação deve ser feita nos PONTEIROS de cada nó da lista; 4. (30% da nota) Crie uma FILA com contatos favoritos do usuário. Dê um limite para esta fila (5 ou 10 contatos por exemplo). Quando o usuário tentar adicionar aos favoritos um contato maior que o tamanho da fila, remova automaticamente um contato de acordo com as características de operação de uma fila;

 

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

int menu();
void InserirInicio(int num);
void InserirFim(int num);
void InserirMeio(int num, int posicao);
int Remover(int num);
void Listar();

struct ElementoDaLista_Simples {
	int dado;
	struct ElementoDaLista_Simples *prox;
} *Head;

int  main() {
	int op, num, pos, c;
	Head = NULL;

	while (1) {
		op = menu();
		switch (op) {
		case 1:
			printf("Digite o numero desejado: ");
			scanf_s("%d", &num);
			while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
			InserirInicio(num);
			break;
		case 2:
			printf("Digite o numero desejado: ");
			scanf_s("%d", &num);
			while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
			InserirFim(num);
			break;
		case 3:
			printf("Digite o numero desejado: ");
			scanf_s("%d", &num);
			while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
			printf("Digite a posicao que deseja inserir: ");
			scanf_s("%d", &pos);
			while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
			InserirMeio(num, pos);
			break;
		case 4:
			int res;
			printf("Digite o numero a ser removido: ");
			scanf_s("%d", &num);
			while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
			res = Remover(num);
			if (res == 1)
				printf("Numero removido.");
			else
				printf("Numero não encontrado.");
			break;
		case 5:
			Listar();
			break;
		case 6:
			return 0;
		default:
			printf("Invalido\n");
		}
	}
	return 0;
}

int menu() {
	int op, c;
	system("Cls");

	printf("1.Inserir no inicio da lista encadeada simples\n");
	printf("2.Inserir no fim da lista encadeada simples\n");
	printf("3.Inserir no meio da lista encadeada simples\n");
	printf("4.Remover da lista encadeada simples\n");
	printf("5.Listar a lista encadeada simples\n");
	printf("6.Sair\n");
	printf("Digite sua escolha: ");

	scanf_s("%d", &op);
	while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
	
	system("Cls");
	return op;
}

void InserirInicio(int num)
{
	ElementoDaLista_Simples *NovoElemento;
	NovoElemento = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
	NovoElemento->dado = num;

	if (Head == NULL)
	{
		Head = NovoElemento;
		Head->prox = NULL;
	}
	else
	{
		NovoElemento->prox = Head;
		Head = NovoElemento;
	}
}

void InserirFim(int num)
{
	ElementoDaLista_Simples *NovoElemento;
	NovoElemento = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
	ElementoDaLista_Simples *ElementoVarredura;
	ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));

	NovoElemento->dado = num;

	if (Head == NULL)
	{
		Head = NovoElemento;
		Head->prox = NULL;
	}
	else
	{
		ElementoVarredura = Head;
		while (ElementoVarredura->prox != NULL)
			ElementoVarredura = ElementoVarredura->prox;

		ElementoVarredura->prox = NovoElemento;
		NovoElemento->prox = NULL;
	}
}

void InserirMeio(int num, int posicao)
{
	ElementoDaLista_Simples *NovoElemento;
	NovoElemento = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
	ElementoDaLista_Simples *ElementoVarredura;
	ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
	ElementoDaLista_Simples *ElementoAuxiliar;
	ElementoAuxiliar = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));

	NovoElemento->dado = num;

	if (posicao == 0)
	{
		Head = NovoElemento;
		Head->prox = NULL;
	}
	else
	{
		ElementoVarredura = Head;
		for (int i = 0; i < posicao - 1; i++)
			ElementoVarredura = ElementoVarredura->prox;

		ElementoAuxiliar = ElementoVarredura->prox;
		ElementoVarredura->prox = NovoElemento;
		NovoElemento->prox = ElementoAuxiliar;
	}
}

int Remover(int num)
{
	ElementoDaLista_Simples *ElementoVarredura;
	ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
	ElementoDaLista_Simples *Anterior;
	Anterior = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));

	ElementoVarredura = Head;
	while (ElementoVarredura != NULL) {
		if (ElementoVarredura->dado == num) {
			if (ElementoVarredura == Head) {
				Head = ElementoVarredura->prox;
				free(ElementoVarredura);
				return 1;
			}
			else {
				Anterior->prox = ElementoVarredura->prox ;
				free(ElementoVarredura);
				return 1;
			}
		}
		else {
			Anterior = ElementoVarredura;
			ElementoVarredura = ElementoVarredura->prox;
		}
	}
	return 0;
}

void Listar()
{
	ElementoDaLista_Simples *ElementoVarredura;
	ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));

	ElementoVarredura = Head;
	if (ElementoVarredura == NULL) {
		return;
	}
	while (ElementoVarredura != NULL) {
		printf("%d ", ElementoVarredura->dado);
		ElementoVarredura = ElementoVarredura->prox;
	}
	printf("\n");

	system("pause");
	return;
}

 

Agradeço desde já.

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

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Referencia para o menu
int menu();
void Inicio();
void Meio();
void Fim();
int Remover();
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Struct para inserção das variaveis nome, numero e email
struct Contatos
{
	char nome[50];
	char numero[15];
	char email[50];
	int posicao;
	struct Contatos* proximo;
} *Head;
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
int main() {

	int opcao;
	Head = NULL;

	while (1)
	{
		opcao = menu();
		switch (opcao)
		{
		case 1:
			Inicio();
			break;
		case 2:
			Meio();
			break;
		case 3:
			Fim();
			break;
		case 4:
			Remover();
			break;
		}
		

	}



	return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//menu de teclas para escolha da opção
int menu() {

	int opcao;
	int c;
	system("Cls");

	printf("1- Adicionar contato no inicio da lista\n");
	printf("2- Adicionar contato em alguma posição na lista\n");
	printf("3- Adicionar contato no final da lista\n");
	printf("4- Remover contato\n");
	printf("5- Listar contato por ordem de inserção\n");
	printf("6- Listar contato por ordem A-Z\n");
	printf("7- Listar contato por ordem Z-A\n");
	printf("8- Créditos\n");
	printf("9- Sair\n");
	printf("Digite uma opção: \n");

	scanf_s("%d", &opcao);
	while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.

	system("cls");
	return opcao;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Caso opção 1, digite as variaveis e crie uma nova struct para salvar.
void Inicio() {

	typedef struct Contatos cont;
	cont pessoa, * p;
	p = &pessoa;
	p->nome;
	p->numero;
	p->email;
	printf("Digite seu nome: \n");
	fflush(stdin);
	fgets(p->nome, 50, stdin);
	printf("Digite seu numero: \n");
	fflush(stdin);
	fgets(p->numero, 15, stdin);
	printf("Digite seu email: \n");
	fflush(stdin);
	fgets(p->email, 50, stdin);


	cont* NovoContato;
	NovoContato = (struct Contatos*)malloc(sizeof(struct Contatos));
	NovoContato->nome;
	NovoContato->numero;
	NovoContato->email;

	if (Head == NULL)
	{
		Head = NovoContato;
		Head->proximo = NULL;
	}
	else
	{
		NovoContato->proximo = Head;

		system("pause");
	}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void Meio() {

	int posicao;

	typedef struct Contatos cont;
	cont pessoa, * p;
	p = &pessoa;
	p->nome;
	p->numero;
	p->email;
	

	printf("Digite seu nome: \n");
	fflush(stdin);
	fgets(p->nome, 50, stdin);
	printf("Digite seu numero: \n");
	fflush(stdin);
	fgets(p->numero, 15, stdin);
	printf("Digite seu email: \n");
	fflush(stdin);
	fgets(p->email, 50, stdin);
	printf("Digite a posicao que deseja inserir: ");
	scanf_s("%d", &posicao);

	cont* NovoContato;
	NovoContato = (struct Contatos*)malloc(sizeof(struct Contatos));
	Contatos* ElementoVarredura;
	ElementoVarredura = (struct Contatos*)malloc(sizeof(struct Contatos));
	Contatos* ElementoAuxiliar;
	ElementoAuxiliar = (struct Contatos*)malloc(sizeof(struct Contatos));
	NovoContato->nome;
	NovoContato->numero;
	NovoContato->email;

	if (posicao == 0)
	{
		Head = NovoContato;
		Head->proximo = NULL;
	}
	else
	{
		ElementoVarredura = Head;
		for (int i = 0; i < posicao - 1; i++)
			ElementoVarredura = ElementoVarredura->proximo;

		ElementoAuxiliar = ElementoVarredura->proximo;
		ElementoVarredura->proximo = NovoContato;
		NovoContato->proximo = ElementoAuxiliar;
	}


}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void Fim() {

	typedef struct Contatos cont;
	cont pessoa, * p;
	p = &pessoa;
	p->nome;
	p->numero;
	p->email;
	printf("Digite seu nome: \n");
	fflush(stdin);
	fgets(p->nome, 50, stdin);
	printf("Digite seu numero: \n");
	fflush(stdin);
	fgets(p->numero, 15, stdin);
	printf("Digite seu email: \n");
	fflush(stdin);
	fgets(p->email, 50, stdin);
	
	
	
	Contatos* NovoContato;
	NovoContato = (struct Contatos*)malloc(sizeof(struct Contatos));
	Contatos* ElementoVarredura;
	ElementoVarredura = (struct Contatos*)malloc(sizeof(struct Contatos));
	NovoContato->nome;
	NovoContato->numero;
	NovoContato->email;

	if (Head == NULL)
	{
		Head = NovoContato;
		Head->proximo = NULL;
	}
	else
	{
		ElementoVarredura = Head;
		while (ElementoVarredura->proximo != NULL)
			ElementoVarredura = ElementoVarredura->proximo;

		ElementoVarredura->proximo = NovoContato;
		NovoContato->proximo = NULL;
	}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
int Remover() {

	int res;
	char num;
	printf("Digite seu numero: \n");
	fflush(stdin);
	fgets(p->numero, 15, stdin);
	res = Remover();
	if (res == 1)
		printf("Numero removido.");
	else
		printf("Numero não encontrado.");

	Contatos* ElementoVarredura;
	ElementoVarredura = (struct Contatos*)malloc(sizeof(struct Contatos));
	Contatos* Anterior;
	Anterior = (struct Contatos*)malloc(sizeof(struct Contatos));

	ElementoVarredura = Head;
	while (ElementoVarredura != NULL) {
		if (ElementoVarredura->numero == num) {
			if (ElementoVarredura == Head) {
				Head = ElementoVarredura->proximo;
				free(ElementoVarredura);
				return 1;
			}
			else {
				Anterior->proximo = ElementoVarredura->proximo;
				free(ElementoVarredura);
				return 1;
			}
		}
		else {
			Anterior = ElementoVarredura;
			ElementoVarredura = ElementoVarredura->proximo;
		}
	}
	return 0;


}

Uma das minhas tentativas de faze-lo

Editado por Matheus Engel
Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...