adjlist.cc.html
//***********************************************************************
#include <limits.h>
#include <iostream.h>
#include "vertex.h"
#include "adjlist.h"
//***********************************************************************
AdjList::AdjList (int new_size) // Constructor
{
size = new_size;
List = new Adj_Node [size];
if (!List)
{
cerr << "Out of space in AdjList !!" << endl;
exit(1);
}
edges = 0;
verts = INT_MAX; // to be set by calling program using setVerts()
for (int i=0;i<size;i++)
{
List[i].head = new Vertex; // Initialize i'th list
List[i].head->distance = INT_MAX; // Initialize to "infinity"
List[i].dist = INT_MAX;
List[i].curpos = List[i].head; // Current pos pointer in list
List[i].known = 0;
}
}
//***********************************************************************
AdjList::~AdjList() // Destructor
{
Vertex *temp,*vert_to_delete;
for (int i=0;i<size;i++)
{
temp = List[i].head;
while (temp)
{
vert_to_delete = temp;
temp = temp->next;
delete vert_to_delete;
}
}
delete [] List;
}
//***********************************************************************
void AdjList::add_Edge(int vertA, int vertB, int edge) // add edge A->B
{
++edges;
if (vertA > verts || vertB > verts)
{
cerr << "Number of vertices exceeds size of " << size
<< " in AdjList::add_Edge !" << endl;
cerr << "Exiting...." << endl;
exit(-1);
}
List[vertA-1].curpos->next = new Vertex(vertB,vertA,edge,NULL);
List[vertA-1].curpos = List[vertA-1].curpos->next;
}
//***********************************************************************
int AdjList::operator()(int vertA,int vertB) // Distance between A & B
{
if (vertA == vertB) return 0; // Same vertices
int distance = INT_MAX; // Default to "Infinity" if not found
Vertex *temp = List[vertA-1].head->next; // Start of List A
while (temp && temp->name != vertB) temp = temp->next; // Find B in List A
if (temp) distance = temp->distance; // Found
return distance;
}
//***********************************************************************