Skip to content

Instantly share code, notes, and snippets.

@jeffersonrnb
Last active October 3, 2016 18:58
Show Gist options
  • Save jeffersonrnb/662bfff8229a639b3a0479e8849ea8f6 to your computer and use it in GitHub Desktop.
Save jeffersonrnb/662bfff8229a639b3a0479e8849ea8f6 to your computer and use it in GitHub Desktop.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#define TamMAX 11
typedef struct Cadastro{
char nome[21];
int idade;
char endereco[21];
struct Cadastro *prox;
}Cadastro;
Cadastro* vetor[TamMAX];
int posicaoNome (char* nome);
Cadastro* criarCadastro (char* nome, int idade, char* endereco);
void imprimir (Cadastro **vetor, int pos);
void inicializar (Cadastro **vetor);
void inserir (Cadastro **vetor, char* nome, int idade, char* endereco);
void limpar (Cadastro **vetor);
void remover (Cadastro **vetor, char* nome);
void apagar (Cadastro *elo);
int compararNomes (Cadastro *inferior, char* meio, Cadastro *superior);
void consultanome(Cadastro **vetor, char* nome);
int posicaoNome (char* nome){
int i;
int valor = 0;
for (i = 0; i < strlen(nome); i++){
if(nome[i] == ' ')
valor += 27;
else
valor += nome[i] - 96;
}
return valor % TamMAX;
}
void inicializar (Cadastro **vetor){
int i;
for (i = 0; i < TamMAX; i++){
vetor[i] = NULL;
}
}
Cadastro* criarCadastro (char* nome, int idade, char* endereco){
Cadastro *novoelo = (Cadastro*)malloc(sizeof(Cadastro));
if (novoelo){
//cout << "\n" << "aqui" << "\n" << nome << endl;
strcpy(novoelo->nome,nome);
strcpy(novoelo->endereco,endereco);
novoelo->idade = idade;
novoelo->prox=NULL;
}
return novoelo;
}
void inserir (Cadastro** vetor, char* nome, int idade, char* endereco){
int posicao = posicaoNome(nome);
//cout << "hit"<< endl;
Cadastro* novoelo = (Cadastro*)malloc(sizeof(Cadastro));
if (novoelo){
strcpy(novoelo->nome,nome);
strcpy(novoelo->endereco,endereco);
novoelo->idade = idade;
novoelo->prox = NULL;
if (!vetor[posicao]){
vetor[posicao] = novoelo;
}else{
Cadastro *primeiro = vetor[posicao];
Cadastro *segundo = primeiro->prox;
Cadastro *novoelo = NULL;
bool busca = true;
while (busca){
switch (compararNomes(primeiro, nome, segundo)){
/* Nome já existe */
case -3:
//cout << "\nnome '" << nome << "' já existe" << endl;
return;
/* Nome já existe */
case -2:
//cout << "\nnome '" << nome << "' já existe" << endl;
return;
/* Está antes da primeira, só acontece no início */
case -1:
novoelo = criarCadastro (nome, idade, endereco);
novoelo->prox = primeiro;
vetor[posicao] = novoelo;
busca = false;
break;
/* Entre os dois */
case 1:
novoelo = criarCadastro (nome, idade, endereco);
novoelo->prox = segundo;
primeiro->prox = novoelo;
busca = false;
break;
default:
primeiro = segundo;
segundo = primeiro->prox;
break;
}
}
}
}
return;
}
void remover (Cadastro **vetor, char* nome){
int posicao = posicaoNome(nome);
if (!vetor[posicao]){
//cout << "Nao ha '" << nome << "' no registro" << endl;
}else{
Cadastro *primeiro = vetor[posicao];
Cadastro *segundo = primeiro->prox;
Cadastro *apagar = NULL;
bool busca = true;
while (busca){
switch (compararNomes(primeiro, nome, segundo)){
/* Nome já existe */
case -3:
apagar = primeiro;
//cout << "A apagar '" << apagar->nome << "' do registro" << endl;
vetor[posicao] = apagar->prox;
free (apagar);
busca = false;
break;
/* Nome já existe */
case -2:
apagar = segundo;
//cout << "A apagar '" << apagar->nome << "' do registro" << endl;
primeiro->prox = apagar->prox;
free (apagar);
busca = false;
break;
default:
primeiro = segundo;
segundo = primeiro->prox;
break;
}
}
}
return;
}
void limpar (Cadastro **vetor){
Cadastro *elo;
int i;
for (i = 0; i < TamMAX; i++){
elo = vetor[i];
apagar (elo);
vetor[i] = NULL;
}
}
void apagar (Cadastro *elo){
if (elo){
if (elo->prox)
apagar(elo->prox);
free (elo);
}
}
void imprimir (Cadastro **vetor, int pos){
Cadastro *elo;
for(elo = vetor[pos];elo; elo = elo->prox)
printf("%s\n", elo->nome);
/*
elo = vetor[pos];
if (elo != NULL){
//cout << "Posicao: "<< pos << endl;
//cout << endl;
while (elo != NULL){
//cout << "Nome: " << elo->nome << endl;
//cout << "idade: " << elo->idade << endl;
//cout << "endereco: " << elo->endereco << endl;
//cout << endl;
elo = elo->prox;
}
}else{
}
*/
}
int compararNomes (Cadastro *inferior, char* meio, Cadastro *superior){
char* inf = inferior->nome;
char* sup = "";
if (superior)
sup = superior->nome;
/*
printf("\ninferior => %s\n", inf.c_str());
printf("meio => %s\n", meio.c_str());
printf("superior => %s\n", sup.c_str());
//*/
if (inf == meio)
return -3;
if (meio == sup)
return -2;
if (inf > meio)
return -1;
if ((inf < meio) && (meio < sup))
return 1;
return 0;
}
void consultanome(Cadastro **vetor, char* nome){
int posicao = posicaoNome(nome);
if (!vetor[posicao]){
}else{
Cadastro *primeiro = vetor[posicao];
Cadastro *segundo = primeiro->prox;
Cadastro *achou = NULL;
bool busca = true;
while (busca){
switch (compararNomes(primeiro, nome, segundo)){
/* Nome já existe */
case -3:
achou = primeiro;
//cout << "Posicao: " << posicao << endl;
//cout << "Nome: " << achou->nome << endl;
//cout << "Idade: " << achou->idade << endl;
//cout << "Endereco: " << achou->endereco << endl;
busca = false;
break;
/* Nome já existe */
case -2:
achou = segundo;
//cout << "Posicao: " << posicao << endl;
//cout << "Nome: " << achou->nome << endl;
//cout << "Idade: " << achou->idade << endl;
//cout << "Endereco: " << achou->endereco << endl;
busca = false;
break;
default:
primeiro = segundo;
segundo = primeiro->prox;
break;
}
}
}
return;
}
int main (void){
char escolha;
int qts_vezes;
int i, pos;
char nome[21], endereco[21];
int idade;
Cadastro *vetor[TamMAX];
inicializar (vetor);
do{
//cout << "Escolha uma opcao: " << endl;
//cin >> escolha;
scanf(" %c", &escolha);
if (escolha == 'i'){
//cin >> qts_vezes;
scanf(" %d", &qts_vezes);
for (i = 0; i < qts_vezes; i++){
scanf(" %[^\n]s", nome);
scanf(" %d", &idade);
scanf(" %[^\n]s", endereco);
//cout << "Nome: " << nome << "\n" << endl;
//cout << "Idade: " << idade << "\n" << endl;
//cout << "Endereco: " << endereco << "\n" << endl;
inserir(vetor, nome, idade, endereco);
}
}
if (escolha == 'r'){
scanf(" %[^\n]s", nome);
remover(vetor, nome);
}
if (escolha == 'c'){
scanf(" %[^\n]s", nome);
consultanome(vetor, nome);
}
if (escolha == 'l'){
scanf(" %d", &pos);
imprimir(vetor, pos);
}
}while (escolha != 'e');
return 0;
}
#include <iostream>
#include <cstdlib>
#include <string.h>
#include <malloc.h>
#define TamMAX 11
using namespace std;
typedef struct Cadastro{
string nome;
int idade;
string endereco;
struct Cadastro *prox;
}Cadastro;
Cadastro* vetor[TamMAX];
int posicaoNome (string nome);
Cadastro* criarCadastro (string nome, int idade, string endereco);
void imprimir (Cadastro **vetor, int pos);
void inicializar (Cadastro **vetor);
void inserir (Cadastro **vetor, string nome, int idade, string endereco);
void limpar (Cadastro **vetor);
void remover (Cadastro **vetor, string nome);
void apagar (Cadastro *elo);
int compararNomes (Cadastro *inferior, string meio, Cadastro *superior);
void consultanome(Cadastro **vetor, string nome);
int posicaoNome (string nome){
int i;
int valor = 0;
for (i = 0; i < nome.size(); i++){
valor += nome[i] - 96;
}
return valor % TamMAX;
}
void inicializar (Cadastro **vetor){
for (int i = 0; i < TamMAX; i++){
vetor[i] = NULL;
}
}
Cadastro* criarCadastro (string nome, int idade, string endereco){
Cadastro *novoelo = (Cadastro*)malloc(sizeof(Cadastro));
if (novoelo){
cout << "\n" << "aqui" << "\n" << nome << endl;
novoelo->nome = nome;
novoelo->endereco = endereco;
novoelo->idade = idade;
novoelo->prox=NULL;
}
return novoelo;
}
void inserir (Cadastro** vetor, string nome, int idade, string endereco){
int posicao = posicaoNome(nome);
//cout << "hit"<< endl;
if (!vetor[posicao]){
Cadastro* novoelo = (Cadastro*)malloc(sizeof(Cadastro));
if (novoelo){
novoelo->nome = nome;
//cout << "here" << endl;
}
}else{
Cadastro *primeiro = vetor[posicao];
Cadastro *segundo = primeiro->prox;
Cadastro *novoelo = NULL;
bool busca = true;
while (busca){
switch (compararNomes(primeiro, nome, segundo)){
/* Nome já existe */
case -3:
//cout << "\nnome '" << nome << "' já existe" << endl;
return;
/* Nome já existe */
case -2:
//cout << "\nnome '" << nome << "' já existe" << endl;
return;
/* Está antes da primeira, só acontece no início */
case -1:
novoelo = criarCadastro (nome, idade, endereco);
novoelo->prox = primeiro;
vetor[posicao] = novoelo;
busca = false;
break;
/* Entre os dois */
case 1:
novoelo = criarCadastro (nome, idade, endereco);
novoelo->prox = segundo;
primeiro->prox = novoelo;
busca = false;
break;
default:
primeiro = segundo;
segundo = primeiro->prox;
break;
}
}
}
return;
}
void remover (Cadastro **vetor, string nome){
int posicao = posicaoNome(nome);
if (!vetor[posicao]){
cout << "Nao ha '" << nome << "' no registro" << endl;
}else{
Cadastro *primeiro = vetor[posicao];
Cadastro *segundo = primeiro->prox;
Cadastro *apagar = NULL;
bool busca = true;
while (busca){
switch (compararNomes(primeiro, nome, segundo)){
/* Nome já existe */
case -3:
apagar = primeiro;
cout << "A apagar '" << apagar->nome << "' do registro" << endl;
vetor[posicao] = apagar->prox;
free (apagar);
busca = false;
break;
/* Nome já existe */
case -2:
apagar = segundo;
cout << "A apagar '" << apagar->nome << "' do registro" << endl;
primeiro->prox = apagar->prox;
free (apagar);
busca = false;
break;
default:
primeiro = segundo;
segundo = primeiro->prox;
break;
}
}
}
return;
}
void limpar (Cadastro **vetor){
Cadastro *elo;
for (int i = 0; i < TamMAX; i++){
elo = vetor[i];
apagar (elo);
vetor[i] = NULL;
}
}
void apagar (Cadastro *elo){
if (elo){
if (elo->prox)
apagar(elo->prox);
free (elo);
}
}
void imprimir (Cadastro **vetor, int pos){
Cadastro *elo;
elo = vetor[pos];
if (elo != NULL){
cout << "Posicao: "<< pos << endl;
cout << endl;
while (elo != NULL){
cout << "Nome: " << elo->nome << endl;
cout << "idade: " << elo->idade << endl;
cout << "endereco: " << elo->endereco << endl;
cout << endl;
elo = elo->prox;
}
}else{
}
}
int compararNomes (Cadastro *inferior, string meio, Cadastro *superior){
string inf = inferior->nome;
string sup = "";
if (superior)
sup = superior->nome;
/*
printf("\ninferior => %s\n", inf.c_str());
printf("meio => %s\n", meio.c_str());
printf("superior => %s\n", sup.c_str());
//*/
if (inf == meio)
return -3;
if (meio == sup)
return -2;
if (inf > meio)
return -1;
if ((inf < meio) && (meio < sup))
return 1;
return 0;
}
void consultanome(Cadastro **vetor, string nome){
int posicao = posicaoNome(nome);
if (!vetor[posicao]){
}else{
Cadastro *primeiro = vetor[posicao];
Cadastro *segundo = primeiro->prox;
Cadastro *achou = NULL;
bool busca = true;
while (busca){
switch (compararNomes(primeiro, nome, segundo)){
/* Nome já existe */
case -3:
achou = primeiro;
cout << "Posicao: " << posicao << endl;
cout << "Nome: " << achou->nome << endl;
cout << "Idade: " << achou->idade << endl;
cout << "Endereco: " << achou->endereco << endl;
busca = false;
break;
/* Nome já existe */
case -2:
achou = segundo;
cout << "Posicao: " << posicao << endl;
cout << "Nome: " << achou->nome << endl;
cout << "Idade: " << achou->idade << endl;
cout << "Endereco: " << achou->endereco << endl;
busca = false;
break;
default:
primeiro = segundo;
segundo = primeiro->prox;
break;
}
}
}
return;
}
int main (void){
char escolha;
int qts_vezes;
int i, pos;
string nome, endereco;
int idade;
Cadastro *vetor[TamMAX];
inicializar (vetor);
do{
//cout << "Escolha uma opcao: " << endl;
cin >> escolha;
if (escolha == 'i'){
cin >> qts_vezes;
for (i = 0; i < qts_vezes; i++){
cin >> nome;
//cout << "Nome: " << nome << "\n" << endl;
cin >> idade;
//cout << "Idade: " << idade << "\n" << endl;
cin >> endereco;
//cout << "Endereco: " << endereco << "\n" << endl;
inserir(vetor, nome, idade, endereco);
}
}
if (escolha == 'r'){
cin >> nome;
remover(vetor, nome);
}
if (escolha == 'c'){
cin >> nome;
consultanome(vetor, nome);
}
if (escolha == 'l'){
cin >> pos;
imprimir(vetor, pos);
}
}while (escolha != 'e');
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment