Ayuda sobre una version iterativa y recursiva de este ejercicio
Hola estarÃa tremendamente agradecido si alguien me ayudase en este ejercicio...
Basado en la definición de tipos de listas simplemente enlazadas con punteros de vista...
lista punteroanodo (lista l, item i);
Devolviendo un puntero al nodo cuyo item es i o null si el item no está en la lista.
Es que a mi no me sale ni queriendo
Basado en la definición de tipos de listas simplemente enlazadas con punteros de vista...
lista punteroanodo (lista l, item i);
Devolviendo un puntero al nodo cuyo item es i o null si el item no está en la lista.
Es que a mi no me sale ni queriendo
Te envio un programa que hace algo parecido a lo que tu pides.
Adecualo a tus necesidades.
Exito ! ! !
------------------------------------------------------------------------
// program d12_4.cpp - page 261.
// count how many times a given value occurs in a Linked List.
// 6/12/2003.
// written in borland c++ - ver 3.1
#include "d12_a.h"conio.h>
#include <stdlib.h>
#define N 50
int Count(Node *p,int value)
{
for(int counter = 0;p;p = p->next)
counter += p->data == value;
return counter;
} // COUNT
void main()
{
clrscr();
cout << "count how many times a given value occurs in a Linked List.n";
cout << "-----------------------------------------------------"
"-------------------------n";
List p;
randomize();
for(int i = 0;i < N;i++)
p.AddInEndOfList(random(10));
cout << "linked list :" << p << endl << endl;
for(int value = 0;value < 10;value++)
cout << setw(10) << value << " occurs in linked list "
<< Count(p.root,value) << " times" << endl;
cout << "-----------------------------------------------------"
<< "-------------------------n";
cout << "end of program - good bye ! ! ! n";
getch();
} // MAIN
-------------------------------------------------------------------
// program d12_a.h - page 261.
// header file for single linked list.
// 12/2003.
// written in borland c++ - ver 3.1
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <limits.h>
//------------------------------------------------------------------------------
struct Node
{
int data;
Node *next;
Node(int DATA = 0) : data(DATA),next(NULL) {}; // CONSTRUCTOR
friend ostream &operator<<(ostream &,const Node &);
friend istream &operator>>(istream &,Node &);
}; // NODE
ostream &operator<<(ostream &out,const Node &right)
{
out << right.data;
return out;
}; // NODE OPERATOR <<
istream &operator>>(istream &in,Node &right)
{
cout << setw(20) << "enter data : ";
in >> right.data;
return in;
} // NODE OPERATOR >>
//------------------------------------------------------------------------------
struct List
{
Node *root;
List() {root = NULL;}; // CONSTRUCTOR
~List();
void AddInEndOfList(int);
friend ostream &operator<<(ostream &,List &);
}; // LIST
List::~List()
{
for(Node *p = root;p;)
{
Node *holder = p;
p = p->next;
delete holder;
}
} // DESTRUCTOR
ostream &operator<<(ostream &out,List &right)
{
for(Node *p = right.root;p;p = p->next)
out << setw(4) << *p;
return out;
}; // LIST OPERATOR <<
void List::AddInEndOfList(int DATA = INT_MAX)
{
for(Node *p = root;p && p->next;p = p->next);
Node *temp = new Node(DATA);
if(!root)
root = temp; // insert head list
else
p->next = temp; // insert in middle list
if(DATA == INT_MAX)
cin >> *temp;
} // ADD IN END OF LIST
//------------------------------------------------------------------------------
Adecualo a tus necesidades.
Exito ! ! !
------------------------------------------------------------------------
// program d12_4.cpp - page 261.
// count how many times a given value occurs in a Linked List.
// 6/12/2003.
// written in borland c++ - ver 3.1
#include "d12_a.h"conio.h>
#include <stdlib.h>
#define N 50
int Count(Node *p,int value)
{
for(int counter = 0;p;p = p->next)
counter += p->data == value;
return counter;
} // COUNT
void main()
{
clrscr();
cout << "count how many times a given value occurs in a Linked List.n";
cout << "-----------------------------------------------------"
"-------------------------n";
List p;
randomize();
for(int i = 0;i < N;i++)
p.AddInEndOfList(random(10));
cout << "linked list :" << p << endl << endl;
for(int value = 0;value < 10;value++)
cout << setw(10) << value << " occurs in linked list "
<< Count(p.root,value) << " times" << endl;
cout << "-----------------------------------------------------"
<< "-------------------------n";
cout << "end of program - good bye ! ! ! n";
getch();
} // MAIN
-------------------------------------------------------------------
// program d12_a.h - page 261.
// header file for single linked list.
// 12/2003.
// written in borland c++ - ver 3.1
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <limits.h>
//------------------------------------------------------------------------------
struct Node
{
int data;
Node *next;
Node(int DATA = 0) : data(DATA),next(NULL) {}; // CONSTRUCTOR
friend ostream &operator<<(ostream &,const Node &);
friend istream &operator>>(istream &,Node &);
}; // NODE
ostream &operator<<(ostream &out,const Node &right)
{
out << right.data;
return out;
}; // NODE OPERATOR <<
istream &operator>>(istream &in,Node &right)
{
cout << setw(20) << "enter data : ";
in >> right.data;
return in;
} // NODE OPERATOR >>
//------------------------------------------------------------------------------
struct List
{
Node *root;
List() {root = NULL;}; // CONSTRUCTOR
~List();
void AddInEndOfList(int);
friend ostream &operator<<(ostream &,List &);
}; // LIST
List::~List()
{
for(Node *p = root;p;)
{
Node *holder = p;
p = p->next;
delete holder;
}
} // DESTRUCTOR
ostream &operator<<(ostream &out,List &right)
{
for(Node *p = right.root;p;p = p->next)
out << setw(4) << *p;
return out;
}; // LIST OPERATOR <<
void List::AddInEndOfList(int DATA = INT_MAX)
{
for(Node *p = root;p && p->next;p = p->next);
Node *temp = new Node(DATA);
if(!root)
root = temp; // insert head list
else
p->next = temp; // insert in middle list
if(DATA == INT_MAX)
cin >> *temp;
} // ADD IN END OF LIST
//------------------------------------------------------------------------------
