Jump to content
Fórum Script Brasil
  • 0

Lista encadeada com string


Question

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

Edited by Matheus Engel
Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Cloud Computing


  • Forum Statistics

    • Total Topics
      148688
    • Total Posts
      644521
×
×
  • Create New...