Thanks for everyone's help so far but now I have a new error when I try to run my program.
18 [main] Driver2 5868 _cygtls::handle_exceptions: Exception: STATUS_ACCESS_VIOLATION
623 [main] Driver2 5868 open_stackdumpfile: Dumping stack trace to Driver2.exe.stackdump
Code:
#include "compTree.h"
#include <iostream>
int main(){
CompTree t;
t.add(10);
t.add(9);
t.add(8);
cout<< t.remove();
return 0;
}
Code:
#include "compTree.h"
CompTree::CompTree(){
v[0] = -1; //set rank 0 to null because the root of the tree starts at rank 1
}
CompTree::Position CompTree::add(int x){
v.push_back(x);
return last();
}
int CompTree::remove(){
int temp = v.back();
v.pop_back();
return temp;
}
int CompTree::removeRoot(){
v[1]=last().element();
return remove();
}
CompTree::Position CompTree::last(){
if(!isEmpty())
return Position(v.size()-1,&v);
}
CompTree::Position CompTree::root(){
if(!isEmpty())
return Position(1,&v);
}
CompTree::Position CompTree::leftChild(Position &p){
if(!isEmpty())
return Position(p.rank*2 ,&v);
}
CompTree::Position CompTree::rightChild(Position &p){
if(!isEmpty())
return Position(p.rank*2+1 ,&v);
}
CompTree::Position CompTree::sibling(Position &p){
int temp = parent(p).rank;
if(v.at((int)floor(temp/2))== p.element())
return Position((int)floor(temp/2+1),&v);
else
return Position((int)floor(temp/2),&v);
}
CompTree::Position CompTree::parent(Position &p){
return Position((int)floor(p.rank/2) ,&v);
}
bool CompTree::isInternal(Position &p){
int temp = (int)floor(p.rank*2);
if ((int)v.size()>= temp)
return true;
else
return false;
}
bool CompTree::isExternal(Position &p){
int temp = (int)floor(p.rank*2);
if ((int)v.size()>= temp)
return false;
else
return true;
}
bool CompTree::isEmpty(){
if(v.at(1) != -1)
return false;
else
return true;
}
void CompTree::swap(CompTree::Position &p1, CompTree::Position &p2){
int temp = p1.element();
p1.ptr->at(p1.rank) = p2.element();
p2.ptr->at(p2.rank) = temp;
}
int CompTree::size(){
return v.size()-1; //because v[0] is not considered part of the tree.
}
CompTree::~CompTree(){};
CompTree::Position::Position(int r, vector<int> *vp){
rank = r;
ptr = vp;
}
int CompTree::Position::element(){
return ptr->at(rank);
}
bool CompTree::Position::isNull(){
if(rank == -1)
return true;
else
return false;
}
CompTree::Position::~Position(){}
Code:
#ifndef COMPTREE_H_
#define COMPTREE_H_
#include <vector>
#include <math.h>
using namespace std;
class CompTree {
public:
class Position;
vector<int> v;
CompTree();
Position add(int x);
Position last();
Position root();
Position leftChild(Position &p);
Position rightChild(Position &p);
Position sibling(Position &p);
Position parent(Position &p);
int remove();
int removeRoot();
bool isInternal(Position &p);
bool isExternal(Position &p);
bool isEmpty();
void swap(Position &p1, Position &p2);
int size();
~CompTree();
class Position {
public:
Position(int r, vector<int> *vp);
int element();
bool isNull();
int rank;
vector<int> *ptr;
~Position();
};
};
#endif /*COMPTREE2_H_*/