Buenas profe, queria saber si lo que desarrolle seria correcto.
2_ válido
typedef struct tnodo *pnodo;
typedef struct tnodo {
int dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo fin;
};
main(){
tlista lista,cop_list;
pnodo nuevo;
}
a_válido
void agregar_inicio(tlista &lista, pnodo nuevo){
pnodo i;
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.fin=nuevo;
}else{
if(lista.inicio==lista.fin){
if(lista.inicio->dato==nuevo->dato){
cout<<"No se puede agregar el dato ya existe";
delete(nuevo);
}else{
nuevo->sig=lista.inicio;
lista.inicio=nuevo;
}
}else{
if(lista.inicio->dato==nuevo->dato || lista.fin->dato==nuevo->dato){
cout<<"No se puede agregar el dato ya existe";
delete(nuevo);
}else{
for(i=lista.inicio;i->sig != lista.fin && nuevo->dato != (i->sig)->dato;i=i->sig);
if((i->sig)->dato!=nuevo->dato){ //aquí te convendría preguntar o plantear la situación en la que llegue al último nodo, como ya tienes la pregunta si coincide con el último, aquí al llegar a esa posición es porque no existe el valor.
nuevo->sig=lista.inicio;
lista.inicio=nuevo;
}else{
cout<<"No se puede agregar el dato ya existe";
delete(nuevo);
}
}
}
}
}
3_ válido
typedef struct tnodo *pnodo;
typedef struct tnodo {
char dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo fin;
int may;
int min;
int simb;
int dig;
};
main(){
tlista lista;
pnodo nuevo;
}
válido
void agregar_final(tlista &lista, pnodo nuevo){
if(lista.inicio==NULL){
lista.inicio=nuevo;
lista.fin=nuevo;
}else{
lista.fin->sig=nuevo;
lista.fin=nuevo;
}
if(nuevo->dato>='a' && nuevo->dato<='z')
lista.min++;
if(nuevo->dato>='A' && nuevo->dato<='Z')
lista.may++;
if(nuevo->dato>='0' && nuevo->dato<='9')
lista.dig++;
if((nuevo->dato>='!' && nuevo->dato<='/') || (nuevo->dato>=':'&&nuevo->dato<='@'))
lista.simb++; // si anidas los condicionales, por descarte podrías llegar a considerar todos los símbolos y no sólo los que tienes contemplados
}
válido
void mostrar_lista(pnodo n, char op1){ //mostrar segun parametro de opcion
if(n == NULL)
cout<<"Lista vacia"<<endl;
else{
if(n->sig==NULL)
cout<<n->dato<<endl;
else{
if(op1=='1'){
cout<<n->dato<<endl;
mostrar_lista(n->sig,op1);
}else{
if(op1=='2'){
mostrar_lista(n->sig,op1);
cout<<n->dato<<endl;
}
}
}
}
}
4_a_
válido
typedef struct tnodo *pnodo;
typedef struct tnodo {
float dato;
pnodo sig;
};
typedef struct tlista{
pnodo inicio;
pnodo fin;
};
main(){
tlista lista;
}
d_válido
bool buscar_nodo(pnodo list, int valor){ //por logica
if(list==NULL)
return false;
else{
if(list->dato==valor)
return true;
else
return buscar_nodo(list->sig,valor);
}
}
pnodo buscar_nodo(pnodo list, int valor){ //tipo puntero
pnodo encontrado=NULL;
if(list==NULL)
return encontrado=NULL; //aquí sería directamente return encontrado;
else{
if(list->dato==valor){
encontrado=list;
return encontrado;
}else
return buscar_nodo(list->sig,valor);
}
}
7_ (solo quiero saber si los recursivos estan bien)
válido
void agregar_final(pnodo &inicio, pnodo &fin, pnodo nuevo){
if(inicio==NULL){
inicio=nuevo;
fin=nuevo;
}else{
if(inicio->sig==NULL){
fin->sig=nuevo;
fin=nuevo;
}else
agregar_final(inicio->sig,fin,nuevo);
}
}
//Válido
pnodo quitar_final(pnodo &inicio, pnodo &fin){
pnodo extraido;
if(inicio==NULL)
extraido=NULL;
else{
if(inicio==fin){
extraido=inicio;
inicio=NULL;
fin=NULL;
}else{
if(inicio->sig==fin){
extraido=inicio->sig;
inicio->sig=NULL;
fin=inicio;
}else
quitar_final(inicio->sig,fin); //falta asignar a extraido el resultado de quitar_final
}
}
return extraido;
}
válido
int contar_nodo(pnodo inicio){
int c;
if(inicio==NULL)
c=0;
else
c=1+contar_nodo(inicio->sig);
return c;
}
desde ya muchas gracias
(Editado por Verónica Torres - envío original sábado, 2 de septiembre de 2023, 00:19)