Topological Sort

Hi all, I am trying to do a topological sort of a graph but my head pointer always seems to be null.. possibly because my list isnt being built? Here is the code please help if you can. Thank

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
#include <fstream>
#include <iostream>
#include <string>

using namespace std;

struct Leader;
struct Follower;

struct Follower
{
	Leader *adjacentLeader;
	Follower *nextFollower;
};

struct Leader
{
	std::string element;
	int inDegree;
	Leader *nextLeader;
	Follower *firstFollower;
};

Leader *head, *tail, *p, *q, *r, *temp;
Follower *f;
string x, y;
int elementCount;

void TopologicalSort(ifstream&);
Leader* BuildList(string,Leader*&,Leader*&,int);
void PrintIn();

int main()
{
	ifstream inFile;
    TopologicalSort(inFile);

	return 0;
}

void TopologicalSort(ifstream &inFile)
{
	inFile.open("prerequisites_windows.txt");

	if (!inFile.is_open())
	{
		cout << "error finding file" << endl;
		return;
	}

	head = new Leader;
	tail = head;
	elementCount = 0;
	getline(inFile,x);
	while (!inFile.eof())
	{ 
		getline(inFile,y);
		p = BuildList (x, head, tail, elementCount);	
		q = BuildList (y, head, tail, elementCount);
		f = new Follower;
		f -> adjacentLeader = q;
		f -> nextFollower = p -> firstFollower;
		p -> firstFollower = f;
		q -> inDegree++;
		getline(inFile,x);
	}

	PrintIn();

	p = head;
	head = NULL;
	r = tail;
	int i = 0;
	while (p != r)
	{	
		q = p;
		p = p -> nextLeader;
		if (q -> inDegree == 0)
		{
			q -> nextLeader = head;
			head = q;
			i++;
			if (i == 1)
				tail = q;
		}
	}
	
	q = head;
	r = tail;
	while (q != NULL)
	{
		cout << q->element;
		elementCount --;
		f = q -> firstFollower;
		q = q -> nextLeader;
	while (f != NULL)
	{
		p = f-> adjacentLeader;
		p -> inDegree--;
		if (p -> inDegree == 0)
		{
			p -> nextLeader = NULL;
			r -> nextLeader = p;
			r = p;
			if (q == NULL)
				q = r;
		}
		f = f -> nextFollower;
	}
	}
	if (elementCount != 0)
		cout <<  "ERROR - SET NOT PARTIALLY ORDERED" << endl;
}

Leader* BuildList (string w, Leader* &head, Leader* &tail,int i)
{
	Leader *h = head;
	tail -> element = w;
	while (h -> element != w)
		h = h -> nextLeader;
	if (h == tail)
	{
		tail = new Leader;
		i++;
		h -> inDegree = 0;
		h -> firstFollower = NULL;
		h -> nextLeader = tail;
	}
	return h;
}

void PrintIn()
{
	temp = head;
	int j = 0;
	temp++;
	
	while(temp != tail)
	{
		j++;
		cout << "Leader " << j << endl;
		cout << "Element = " << temp->element << endl;
		cout << "inDegree = " << temp->inDegree << endl;
		if (temp->firstFollower == NULL)
		{
			cout << "Follower 1 = N/A" << endl;
		}
		else		
		{
			cout << "Follower 1 = " << temp->firstFollower->adjacentLeader->element << endl;
			if (temp->firstFollower->nextFollower == NULL)
				cout << "Follower 2 = N/A" << endl;
			else
				cout << "Follower 2 = " << temp->nextLeader->element;
		}
		temp++;
	}
}
I have confirmed that the list is being built it is just my PrintIn function which crashes the program.
Figured it out.
Topic archived. No new replies allowed.