Muchas Gracias, ya lo resolví. Excelente explicación.
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menúvoid insertAfter(int llave, int dato) {
struct node *l;
l = malloc(sizeof(struct node));
count++;
if (start == NULL) { // Primera vez
start = l;
start->data = dato;
start->next = NULL;
return;
}
found->data = llave;
l->data = dato;
found->next = l;
}
void insertAfter(int llave, int dato) {
struct node *l,*t;
l = malloc(sizeof(struct node));
count++;
if (start == NULL) { // Primera vez
start = t;
start->data = dato;
start->next = NULL;
return;
}
found->data = llave;
l->data = dato;
found->next = l;
}
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <locale.h>
// Definición de variables globales
struct node {
int data;
struct node *next;
};
struct node *start = NULL; // start es el pointer al primer nodo
struct node *found = NULL; // found es el pointer al nodo encontrado
int count = 0; // Número de nodos
// Definición de funciones
void insertFirst(int); // Inserta un nodo al principio de la lista
void insertLast(int); // Inserta un nodo al final de la lista
void insertAfter(int, int); // Inserta un nodo después de otro
int find(int); // Buscar un nodo
void traverse(); // Realiza el recorrido de la lista
void deleteFirst(); // Remueve el primer nodo de la lista
void deleteLast(); // Remueve el último elemento de la lista
void create(); // Función auxiliar, crea una lista
int main () {
int dato, opcion;
setlocale(LC_ALL, ""); // para caracteres del Español
printf(" 1 - Insertar al inicio de la linked list.\n");
printf(" 2 - Insertar al final de la linked list.\n");
printf(" 3 - Insertar después de otro.\n");
printf(" 4 - Buscar un nodo en la lista.\n");
printf(" 5 - Desplegar la linked list (traverse).\n");
printf(" 6 - Borrar elemento al inicio\n");
printf(" 7 - Borrar elemento al final.\n");
printf(" 8 - Terminar\n");
create(); // crea una lista de prueba
while (true) {
printf("Teclee la opción: ");
scanf("%d", &opcion);
switch (opcion) {
case 1: // insertar al inicio
printf("Teclee valor del elemento a insertar al inicio\n");
scanf("%d", &dato);
insertFirst(dato);
break;
case 2: // insertar al final
printf("Teclee valor del elemento a insertar al final\n");
scanf("%d", &dato);
insertLast(dato);
break;
case 3: // insertar después
printf("Teclee valor de la llave.\n");
scanf("%d", &dato);
int llave = find(dato);
if (llave == -2) { // find regresa -2 si la lista está vacía
break;
}
if(llave == -1) { // find regresa -1 si no se encuentra
printf("No se encontró %d en la lista.\n", dato);
break;
}
printf("Teclee valor de nodo a insertar después de llave.\n");
scanf("%d", &dato);
int nuevo = find(dato);
insertAfter(llave, dato);
break;
case 4: // buscar
printf("Teclee valor del elemento a buscar.\n");
scanf("%d", &dato);
int encontrado = find(dato);
if (encontrado == -2) { // find regresa -2 si la lista está vacía
break;
}
if(encontrado == -1) { // find regresa -1 si no se encuentra
printf("No se encontró %d en la lista.\n", dato);
} else {
printf("Se encontró %d en la lista.\n", dato);
}
break;
case 5: // recorrer
traverse();
break;
case 6: // borrar el primero
deleteFirst();
break;
case 7: // borrar el último
deleteLast();
break;
case 8:
printf("Gracias por participar");
exit(0);
default:
printf("Opción inválida, intente de nuevo\n");
}
}
return 0;
}
void insertFirst(int dato) {
struct node *t;
t = malloc(sizeof(struct node)); // ubica memoria para el nodo
count++;
if (start == NULL) { // primera vez
start = t;
start->data = dato;
start->next = NULL;
return;
}
t->data = dato;
t->next = start;
start = t;
}
void insertLast(int dato) {
struct node *t, *temp;
t = malloc(sizeof(struct node));
count++;
if (start == NULL) { // Primera vez
start = t;
start->data = dato;
start->next = NULL;
return;
}
temp = start;
while (temp->next != NULL) { // busca el último nodo
temp = temp->next;
}
temp->next = t;
t->data = dato;
t->next = NULL;
}
void insertAfter(int llave, int dato) {
}
int find(int datoBuscado) {
struct node *temp;
temp = start;
if (temp == NULL) {
printf("Linked list vacía.\n");
return -2;
}
while (temp->next != NULL) { // busca
if(temp->data == datoBuscado) {
found = temp;
return temp->data;
} else {
temp = temp->next;
}
}
if(temp->data == datoBuscado) { // en caso de que sea el último
found = temp;
return temp->data;
}
return -1;
}
void traverse() {
struct node *t;
t = start;
if (t == NULL) {
printf("Linked list vacía.\n");
return;
}
printf("Hay %d elemento(s) en la linked list.\n", count);
while (t->next != NULL) {
printf("%d -> ", t->data);
t = t->next;
}
printf("%d\n", t->data);
}
void deleteFirst() {
struct node *t;
int n;
if (start == NULL) {
printf("Linked list vacía.\n");
return;
}
n = start->data;
t = start->next;
free(start);
start = t;
count--;
printf("%d eliminado del inicio de la linked list.\n", n);
}
void deleteLast() {
struct node *t, *u;
int n;
if (start == NULL) {
printf("Linked list vacía.\n");
return;
}
count--;
if (start->next == NULL) { // un solo nodo en la lista
n = start->data;
free(start);
start = NULL;
printf("%d eliminado del final de la linked list.\n", n);
return;
}
t = start;
while (t->next != NULL) {
u = t;
t = t->next;
}
n = t->data;
u->next = NULL;
free(t);
printf("%d eliminado del final de la linked list.\n", n);
}
void create() {
insertFirst(444);
insertFirst(333);
insertFirst(222);
insertFirst(111);
}
void mostrarNombres(Persona *personas, int numeroPersonas){
int opcion,opc;
char arregloPersonas[50][LIMITE]; // limite = 100
do{
for(int i = 0; i < numeroPersonas; i++){
printf("%d Nombre: %s\n", i+1,personas[i].nombre);
printf("\n\n");
}
printf(" Ingrese el numero correspondiente al nombre que desea: ");
scanf("%d",&opcion);
for(int j=0; j<numeroLibros; j++){
if(opcion == j+1){
//En este caso la persona con el numero que ingrese deberia guardarse en el arreglo, y es lo que no funciona
//personas[j].nombre
}
}
printf(" Desea agregar otro nombre?, 1 = SI , 2 = NO: ");
scanf("%d",&opc);
system("cls");
}while(opc == 1);
if(opc == 2){
printf("\nNOMBRES AGREGADOS:\n");
for(int i=0; i<numeroPersonas;i++){
printf("%s\n",arregloPersonas[i]);
}
}
else{
printf("ERROR, OPCION NO VALIDA");
}
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct{
char *nombre;
char *autor;
int cantidad;
int precio;
}libros;
libros *l;
void menu();
void vaciar(char temp[]);
void copiarNombre(char temp[],int i);
void copiarAutor(char temp[],int i);
int main(){
char temp[50],aux;
int contador = 0;
FILE *fichero;
fichero = fopen("libros.txt","rt");
if(fichero == NULL){
printf("No se ha encontrado el documento\n");
return 0;
}
while(!feof(fichero)){
fgets(temp,50,fichero);
contador++;
}
rewind(fichero);
l = (libros*)malloc(contador*sizeof(libros));
if(l == NULL){
printf("NO SE HA PODIDO RESERVAR LA MEMORIA\n");
return 0;
}
for(int i=0;!feof(fichero); i++){
vaciar(temp);
aux = '0';
for(int j=0; aux != ','; j++ ){
aux = fgetc(fichero);
if(aux != ','){
temp[j] = aux;
}
}
copiarNombre(temp,i);
copiarAutor(temp,i);
fgets(temp,4,fichero);
l[i].cantidad = atoi(temp);
fgets(temp,5,fichero);
l[i].precio = atoi(temp);
printf("Precio: %d\n",l[i].precio);
}
fclose(fichero);
getchar();
return 0;
}
void menu(){
int opc;
printf("\t\t\tLIBRERIA FI\n\n");
printf("1. Leer inventario inicial\n");
printf("2. Mostrar inventario de existencias\n");
printf("3. Vender libros\n");
printf("4. Informe de ventas\n");
printf("5. Salir\n");
printf(" \nIngrese el numero correspondiente a la operacion que desea realizar: ");
scanf("%d",&opc);
}
void vaciar(char temp[]){
for(int i=0; i<50; i++){
temp[i] = '\0';
}
}
void copiarNombre(char temp[],int i){
int longitud;
longitud = strlen(temp)+1;
l[i].nombre = (char*)malloc(longitud*sizeof(char));
if(l[i].nombre == NULL){
printf("No se ha podido reservar memoria\n");
return 0;
}
strcpy(l[i].nombre,temp);
}
void copiarAutor(char temp[],int i){
int longitud;
longitud = strlen(temp)+1;
l[i].autor = (char*)malloc(longitud*sizeof(char));
if(l[i].autor == NULL){
printf("No se ha podido reservar memoria\n");
return 0;
}
strcpy(l[i].autor,temp);
}
La casa de los espiritus,Isabel Allende,5,345
La Metamorfosis,Franz Kafka,3,560
La Odisea,Homero,7,200
El Principito,Antoine de Saint-Exupery,2,499
El Laberinto de la Soledad,Octavio Paz,1,150
El tunel,Ernesto Sabato,3,100
Los miserables,Victor Hugo,5,290
Cuentos de amor de locura y de muerte,Horacio Quiroga,4,563
El amor en lo tiempos de colera,Gabriel Garcia Marquez,6,218