All pastes #142412 Raw Edit

Mine

public text v1 · immutable
#142412 ·published 2006-08-21 13:07 UTC
rendered paste body
#ifndef RING
#define RING
/**********************************************************
       Chordalring Class
A Chordal ring has no beginning or end but only a current position
which is initially at node labelled 1


The chordal ring C(n,k), where n >= 5 and 2  <= k <= n/2, 
consists of n items, each assigned a
unique number between 1 and n. Each item, labelled i, has a connection
with two other items, namely, the item labelled i+1 (modulo n) and the
item labelled i+k (modulo n). We will refer to connections like i to i+1
(modulo n) as short-links and connections like i to i+k (modulo n) as long-links.

Note that long-links can be calculated in c++ as
    from i to (i+k-1)%n +1
************************************************************/
#include <iostream>
#include <cstdlib>
using namespace std;

      struct node 
      {
         int num;
         node * shortlink;  // short link
         node * longlink;   // long link
      };


class ring{
  public:
    ring();               // Pre  : none
                          // Post : an empty ring is created
    ring(ring const &otherRing);
    void create (int n, int k);  
                          // Pre  : none
                          // Post : creates a Chordal ring of n and k
                          //        with current at node labelled 1
    void move(int y);     // Pre  : the ring is not empty
                          // Post : have moved the current position
                          //        y places around the ring
    int getCurrent()const;// Pre  : the ring is not empty
                          // Post : returns the value at the current position
    int size()const;      // Pre  : none
                          // Post : returns the number of nodes in the ring
    void dumpShort()const;// Pre  : ring is not empty
                          // Post : Starting with current node and using short links
                          //        each node in chordal ring is displayed (one per line) 
    void dumpLong()const; // Pre  : ring is not empty
                          // Post : Starting with current node and using long links
                          //        each node in chordal ring is displayed (one per line)

    void display()const;  // Pre  : ring is not empty
                          // Post : starting from current node and using short links
                          //        each node in chordal ring is displayed in full
                          //        i.e. node, short-linked connection, long-linked connection
                          //          
    bool empty() const;   // Pre  : none
                          // Post : returns true if ring is empty and otherwise false 
    void remove(int x);   // Pre  :  ring is not empty
                          // Post :  removes the node with value x from the ring.
                          //         nodes previously linked (short and long) to x will now link to x's connections
                          //         (short and long links respectively)
                          //         if current position is at x then current moved to x's short link.
    bool hasMember(int x) const;
                          // Pre  : none
                          // Post : returns true if a node with value x is a member of 
                          //        ring
  protected:
     void createShort(int n);  // called by create to create the short linked ring
     void createLong(int n,int k); // called by create to create the long linked ring
  private:
      int length;
      node *current;
};
   
#endif