OB_List02
Home ] Up ]

 

//Date:   2003.09.22
//File:   OB_List02.cpp
//Author: AOU

#include <iostream.h>
#include <stdlib.h>
#include <time.h>


/*
NEW

void testIsSorted(void);
void testPopulate(void);
void initialize(void);
bool isSorted(void);
void populate(int n);

*/


////////////////////////////////////////
//constants
////////////////////////////////////////
const int MAX_SIZE = 25;
const int TEST_COUNT = 19;
const int MAX_VALUE = 15;
const int UNDEFINED = -911;


////////////////////////////////////////
//prototypes
////////////////////////////////////////
void testSortBubble(void);
void testInsert(void);
void testShuffle(void);
void testIsSorted(void);
void testPopulate(void);



////////////////////////////////////////
//class COList
////////////////////////////////////////
class COList
  {
  private:
    int a[MAX_SIZE];
    int n;
  public:
    COList(void);
    void display(void);
    void initialize(void);
    bool insert(int x);
    void swap(int &x, int &y)
      {
      int temp = x;
      x = y;
      y = temp;
      };
    bool isSorted(void);
    void shuffle(void);
    void populate(int n);
    void sortBubble(void);
  };


////////////////////////////////////////
//main
////////////////////////////////////////
void main(void)
  {
  srand(time(NULL));

  /*
  COList myList, youList, hisList;
  myList.display();

  myList.insert(12);
  myList.display();

  myList.insert(16);
  myList.display();

  myList.insert(14);
  myList.display();
  //testInsert();
  //testShuffle();
  //testSortBubble();
  */
  ///testPopulate();
  testIsSorted();

  }

void testPopulate(void)
  {
  cout << "++++++++++++\n";
  cout << "testPopulate\n";
  cout << "++++++++++++\n";

  for (int c=1; c<=TEST_COUNT; c++)
    {
    COList myList;

    int n = rand()%(MAX_SIZE+1);
    cout << "n = " << n << endl;
    myList.populate(n);

    myList.display();

    cout << "*****************\n";

    }
  }


void COList::populate(int n)
  {
  for (int i=1; i<=n; i++)
    {
    int x = rand()%(MAX_VALUE+1);
    (*this).insert(x);
    }
  }


void testIsSorted(void)
  {
  cout << "++++++++++++\n";
  cout << "testIsSorted\n";
  cout << "++++++++++++\n";

  for (int c=1; c<=TEST_COUNT; c++)
    {
    COList myList;

    int n = rand()%(MAX_SIZE+1);
    cout << "n = " << n << endl;
    myList.populate(n);

    myList.display();

    if (myList.isSorted())
        cout << "List is sorted\n";
      else
        cout << "List is NOT NOT sorted\n";


    cout << "*****************\n";

    }
  }


bool COList::isSorted(void)
  {
  for (int i=0; i<=n-2; i++)
    if (a[i] > a[i+1]) 
      return false;

  return true;
  }


void COList::initialize(void)
  {
  for (int i=0; i<=MAX_SIZE-1; i++)
    a[i] = UNDEFINED;

  n = 0;
  }

bool COList::insert(int x)
  {
  if (0 == n)
      {
      a[n] = x;
      n++;
      return true;
      };

  if (MAX_SIZE == n)
      return false;

  if (n > 0)
      {
      a[n] = x;
      n++;

      for (int i=n-1; i>=1; i--)
        {
        if (a[i] >= a[i-1]) return true;
        swap(a[i], a[i-1]);
        }

      return true;
      }

  return false;

  }


void COList::display(void)
  {
  cout << "a[" << n << "]: ";
  for (int i=0; i<=n-1; i++)
    cout << a[i] << ' ';

  cout << endl;
  }


COList::COList(void)
  {
  cout << "BEING INITIALIZED\n";
  initialize();
  }