#include<iostream.h>


class cell {
int disc;
cell *next;
cell (int d)
{
disc = d;
next = this;
}
cell (int d, cell *n)
{
disc = d;
next = n;
}
friend class list;
};

class list{
cell *rear;
public:
int empty() { return rear == rear->next; }


void pop(int &i)
{
i = 0;
if( empty() ) return;
cell *front = rear->next;
rear->next = front->next;
i = front->disc;
delete front;
return;
}

void push(int d)
{
rear->next = new cell(d,rear->next);
}



list() { rear = new cell(0); }

~list()
{
int i,j,l;
long k;
while(!empty()) pop(i);
}
};


list pegs[3];

typedef int (*oper)(int);

int decr(int a)
{
a--;
if(a<0)
a=2;
return a;
}

int incr(int a)
{
a = (a+1)%3;
return a;
}



int main(void)
{
int n;
oper incr_decr;
int curr=0;
int p1 = 1, p2 = 2;
int d0,d1,d2;
cout << "Enter Number Of Discs:";
cin >> n;
for(int i = n; i > 0; i--)
pegs[0].push(i);
incr_decr = n%2 ? decr : incr; //conditional statement
while(1)
{
pegs[curr].pop(d0);
cout<<"Disc "<<d0<<" From "<<curr;
curr = incr_decr(curr);
pegs[curr].push(d0);
cout<<" To "<<curr<<endl;
p1 = incr_decr(p1);
p2 = incr_decr(p2);
if(!pegs[p1].empty() && !pegs[p2].empty())
{
pegs[p1].pop(d1);
pegs[p2].pop(d2);

if(d1 < d2)
{
pegs[p2].push(d2);
pegs[p2].push(d1);
cout<<"Disc "<<d1<<" From "<<p1<<" To "<<p2<<endl;
}
else
{
pegs[p1].push(d1);
pegs[p1].push(d2);
cout<<"Disc "<<d2<<" From "<<p2<<" To "<<p1<<endl;
}
}
else
{
if(pegs[p1].empty() && pegs[p2].empty())
break;
if(pegs[p1].empty())
{
pegs[p2].pop(d2);
pegs[p1].push(d2);
cout<<"Disc "<<d2<<" From "<<p2<<" To "<<p1<<endl;
}
else
{
pegs[p1].pop(d1);
pegs[p2].push(d1);
cout<<"Disc "<<d1<<" From "<<p1<<" To "<<p2<<endl;
}
}
}
return 1;
}



if not do you think you can at least give me some clues as to how the ? and : work and how the curr = incr_decr(curr); works.
I have not been in a C++ class before and i could use some help making this into a C file.
Thanks