SSL03
Home ] Up ]

 

//file   SLL03.cpp
//date   04/27/2005
//author aou
//csis250.tripod.com


///////////////////////////////////////////////////////////
//includes
///////////////////////////////////////////////////////////
#include <iostream>
using namespace std;


class CInfo
  {
  private:
    int value;
    CInfo *next;

  friend class CSLL;
  friend ostream & operator << (ostream & bob, const CSLL & list);
  };


class CSLL
  {
  private:
    int n;
    CInfo *first;
    CInfo *last;
    void initialize(void);
  public:
    CSLL(void);  //default constructor///////////////////////////////
    bool insert(int x);/////////////////////////////////////////////////
    friend ostream & operator << (ostream & bob, const CSLL & list);/////
    CSLL(char ch); //constructs based on value of ch ///////////////////
    CSLL(int low, int high);  
    CSLL(int low, int high, int n);
    CSLL(const CSLL &list);
    void input(void);
    bool insert(const CSLL & list2);
    bool operator == (const CSLL &list2);
  };


void main(void)
  {
  /*
  CSLL myList;
  cout << myList << endl;
  myList.insert(666);
  cout << myList << endl;

  myList.insert(555);
  cout << myList << endl;
  */

  /*
  for (int i=1; i<=10; i++)
    {
    CSLL myList('r');
    cout << myList << endl;
    }
  */

  for (int i=1; i<=10; i++)
    {
    CSLL myList(10, 20);
    cout << myList << endl;
    }

  }


CSLL::CSLL(int low, int high)
  {
  this->initialize();
  if (low > high)
    return;

  int m = rand()%20;
  for (int i=1; i<=m; i++)
    {
    int x = low + rand()%(high-low+1);
    this->insert(x);
    }
  }


CSLL::CSLL(char ch)
  {
  this->initialize();
  if (ch == 'r')
    {
    int m = rand()%20;
    for (int i=1; i<=m; i++)
      {
      int x = rand()%100;
      this->insert(x);
      }
    }
  }

bool CSLL::insert(int x)
  {
  /*
  set agent to available block of type CInfo
  copy x to value part of new block
  set next part of new block to NULL
  set first to agent
  set last to agent
  */
  CInfo *agent;
  agent = new CInfo;
  agent->value = x;
  agent ->next = NULL;
  if (n == 0)
    {
    first = agent;
    last  = agent;
    }
  else
    {
    last->next = agent;
    last = agent;
    }


  this->n++;
  return true;
  }


ostream & operator << (ostream & bob, const CSLL & list)
  {
  bob << "SLL(" << list.n << "): ";

  CInfo *agent;

  agent = list.first;

  while (agent != NULL)
    {
    bob << agent->value << ' ';
    agent = agent->next;
    }

  return bob;
  }


CSLL::CSLL(void)
  {
  this->initialize();
  }

void CSLL::initialize(void)
  {
  //n = 0;
  //(*this).n = 0;
  this->n = 0;
  this->first = NULL;
  this->last = NULL;
  }