Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit bb040eb

Browse files
Adjacency list in Java
0 parents commit bb040eb

File tree

4 files changed

+417
-0
lines changed

4 files changed

+417
-0
lines changed
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
/*
2+
Copyright (C) Deepali Srivastava - All Rights Reserved
3+
This code is part of DSA course available on CourseGalaxy.com
4+
*/
5+
6+
package adjacencyListRepresentation;
7+
8+
import java.util.Scanner;
9+
10+
public class Demo
11+
{
12+
public static void main(String [] args)
13+
{
14+
Scanner scan = new Scanner(System.in);
15+
16+
LinkedDigraph g = new LinkedDigraph();
17+
18+
int choice;
19+
String u,v;
20+
21+
while(true)
22+
{
23+
System.out.println("1.Display ");
24+
System.out.println("2.Insert a vertex");
25+
System.out.println("3.Delete a vertex");
26+
System.out.println("4.Insert an edge");
27+
System.out.println("5.Delete an edge");
28+
System.out.println("6.Display Indegree and outdegree of a vertex");
29+
System.out.println("7.Check if there is an edge between two vertices");
30+
System.out.println("8.Exit");
31+
System.out.print("Enter your choice : ");
32+
choice = scan.nextInt();
33+
if(choice==8)
34+
break;
35+
36+
switch(choice)
37+
{
38+
case 1:
39+
System.out.println();
40+
g.display();
41+
System.out.println("\n Vertices = " + g.vertices()+ ", Edges = " + g.edges() + "\n");
42+
break;
43+
case 2:
44+
System.out.print("Enter a vertex to be inserted : ");
45+
u=scan.next();
46+
g.insertVertex(u);
47+
break;
48+
case 3:
49+
System.out.print("Enter a vertex to be deleted : ");
50+
u=scan.next();
51+
g.deleteVertex(u);
52+
break;
53+
case 4:
54+
System.out.print("Enter an edge to be inserted : ");
55+
u=scan.next();
56+
v=scan.next();
57+
g.insertEdge(u,v);
58+
break;
59+
case 5:
60+
System.out.print("Enter an edge to be deleted : ");
61+
u=scan.next();
62+
v=scan.next();
63+
g.deleteEdge(u,v);
64+
break;
65+
case 6:
66+
System.out.print("Enter a vertex : ");
67+
u=scan.next();
68+
System.out.println("Indegree is : " + g.inDegree(u));
69+
System.out.println("Outdegree is : " + g.outDegree(u));
70+
break;
71+
case 7:
72+
System.out.print("Enter two vertices : ");
73+
u=scan.next();
74+
v=scan.next();
75+
if(g.edgeExists(u,v))
76+
System.out.println("Vertex " + v + " is adjacent to vertex " + u);
77+
else
78+
System.out.println("Vertex " + v + " is not adjacent to vertex " + u);
79+
80+
if(g.edgeExists(v,u))
81+
System.out.println("Vertex " + u + " is adjacent to vertex " + v);
82+
else
83+
System.out.println("Vertex " + u + " is not adjacent to vertex " + v);
84+
85+
default:
86+
System.out.println("Wrong choice");
87+
break;
88+
}
89+
}
90+
}
91+
92+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
Copyright (C) Deepali Srivastava - All Rights Reserved
3+
This code is part of DSA course available on CourseGalaxy.com
4+
*/
5+
6+
package adjacencyListRepresentation;
7+
8+
public class EdgeNode
9+
{
10+
VertexNode endVertex;
11+
EdgeNode nextEdge;
12+
13+
public EdgeNode(VertexNode v)
14+
{
15+
endVertex = v;
16+
}
17+
}
Lines changed: 285 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,285 @@
1+
/*
2+
Copyright (C) Deepali Srivastava - All Rights Reserved
3+
This code is part of DSA course available on CourseGalaxy.com
4+
*/
5+
6+
package adjacencyListRepresentation;
7+
8+
public class LinkedDigraph
9+
{
10+
VertexNode start;
11+
int n;
12+
int e;
13+
14+
public int vertices()
15+
{
16+
return n;
17+
}
18+
19+
public int edges()
20+
{
21+
return e;
22+
}
23+
24+
public void insertVertex(String s)
25+
{
26+
VertexNode temp = new VertexNode(s);
27+
if(start==null)
28+
start=temp;
29+
else
30+
{
31+
VertexNode p=start;
32+
while(p.nextVertex!=null)
33+
{
34+
if(p.name.equals(s))
35+
{
36+
System.out.println("Vertex already present");
37+
return;
38+
}
39+
p=p.nextVertex;
40+
}
41+
if(p.name.equals(s))
42+
{
43+
System.out.println("Vertex already present");
44+
return;
45+
}
46+
p.nextVertex=temp;
47+
}
48+
n++;
49+
}
50+
51+
public void deleteVertex(String s)
52+
{
53+
deletefromEdgeLists(s);
54+
deletefromVertexList(s);
55+
}
56+
57+
/*Delete incoming edges*/
58+
private void deletefromEdgeLists(String s)
59+
{
60+
for(VertexNode p=start; p!=null; p=p.nextVertex)
61+
{
62+
if(p.firstEdge==null)
63+
continue;
64+
65+
if(p.firstEdge.endVertex.name.equals(s))
66+
{
67+
p.firstEdge = p.firstEdge.nextEdge;
68+
e--;
69+
}
70+
else
71+
{
72+
EdgeNode q=p.firstEdge;
73+
while(q.nextEdge!=null)
74+
{
75+
if(q.nextEdge.endVertex.name.equals(s))
76+
{
77+
q.nextEdge = q.nextEdge.nextEdge;
78+
e--;
79+
break;
80+
}
81+
q=q.nextEdge;
82+
}
83+
}
84+
}
85+
}
86+
87+
88+
private void deletefromVertexList(String s)
89+
{
90+
if(start==null)
91+
{
92+
System.out.println("No vertices to be deleted");
93+
return;
94+
}
95+
96+
if(start.name.equals(s)) /* Vertex to be deleted is first vertex of list*/
97+
{
98+
for(EdgeNode q=start.firstEdge; q!=null; q=q.nextEdge)
99+
e--;
100+
start=start.nextVertex;
101+
n--;
102+
}
103+
else
104+
{
105+
VertexNode p=start;
106+
while(p.nextVertex!=null)
107+
{
108+
if(p.nextVertex.name.equals(s))
109+
break;
110+
p=p.nextVertex;
111+
}
112+
113+
if(p.nextVertex==null)
114+
{
115+
System.out.println("Vertex not found");
116+
return;
117+
}
118+
else
119+
{
120+
for(EdgeNode q=p.nextVertex.firstEdge; q!=null; q=q.nextEdge)
121+
e--;
122+
p.nextVertex = p.nextVertex.nextVertex;
123+
n--;
124+
}
125+
}
126+
}
127+
128+
private VertexNode findVertex(String s)
129+
{
130+
VertexNode p=start;
131+
while(p!=null)
132+
{
133+
if(p.name.equals(s))
134+
return p;
135+
p=p.nextVertex;
136+
}
137+
return null;
138+
}/*End of findVertex()*/
139+
140+
/*Insert an edge (s1,s2) */
141+
public void insertEdge(String s1, String s2)
142+
{
143+
if(s1.equals(s2))
144+
{
145+
System.out.println("Inavlid Edge : Start and end vertices are same");
146+
return;
147+
}
148+
149+
VertexNode u = findVertex(s1);
150+
VertexNode v = findVertex(s2);
151+
152+
if(u==null)
153+
{
154+
System.out.println("Start vertex not present, first insert vertex " + s1);
155+
return;
156+
}
157+
if(v==null)
158+
{
159+
System.out.println("End vertex not present, first insert vertex " + s2);
160+
return;
161+
}
162+
163+
EdgeNode temp = new EdgeNode(v);
164+
if(u.firstEdge==null)
165+
{
166+
u.firstEdge=temp;
167+
e++;
168+
}
169+
else
170+
{
171+
EdgeNode p=u.firstEdge;
172+
while(p.nextEdge!=null)
173+
{
174+
if(p.endVertex.name.equals(s2))
175+
{
176+
System.out.println("Edge present");
177+
return;
178+
}
179+
p=p.nextEdge;
180+
}
181+
if(p.endVertex.name.equals(s2))
182+
{
183+
System.out.println("Edge present");
184+
return;
185+
}
186+
p.nextEdge=temp;
187+
e++;
188+
}
189+
}
190+
191+
/* Delete the edge (s1,s2) */
192+
public void deleteEdge(String s1, String s2)
193+
{
194+
VertexNode u = findVertex(s1);
195+
196+
if(u==null)
197+
{
198+
System.out.println("Start vertex not present");
199+
return;
200+
}
201+
if(u.firstEdge == null)
202+
{
203+
System.out.println("Edge not present");
204+
return;
205+
}
206+
207+
if(u.firstEdge.endVertex.name.equals(s2))
208+
{
209+
u.firstEdge = u.firstEdge.nextEdge;
210+
e--;
211+
return;
212+
}
213+
EdgeNode q = u.firstEdge;
214+
while(q.nextEdge != null)
215+
{
216+
if(q.nextEdge.endVertex.name.equals(s2))
217+
{
218+
q.nextEdge = q.nextEdge.nextEdge;
219+
e--;
220+
return;
221+
}
222+
q=q.nextEdge;
223+
}
224+
System.out.println("Edge not present");
225+
}
226+
227+
public void display()
228+
{
229+
EdgeNode q;
230+
for(VertexNode p=start; p!=null; p=p.nextVertex)
231+
{
232+
System.out.print(p + "->");
233+
for(q=p.firstEdge; q!=null; q=q.nextEdge)
234+
System.out.print(" " + q.endVertex);
235+
System.out.println();
236+
}
237+
}
238+
239+
/* Returns true if s2 is adjacent to s1, i.e. if edge (s1,s2) exists */
240+
public boolean edgeExists(String s1, String s2)
241+
{
242+
VertexNode u = findVertex(s1);
243+
EdgeNode q=u.firstEdge;
244+
while(q!=null)
245+
{
246+
if(q.endVertex.name.equals(s2))
247+
return true;
248+
q=q.nextEdge;
249+
}
250+
return false;
251+
}
252+
/*Returns number of edges going out from vertex s*/
253+
public int outDegree(String s)
254+
{
255+
VertexNode u = findVertex(s);
256+
if(u==null)
257+
throw new IllegalArgumentException("Vertex not present");
258+
259+
int out=0;
260+
EdgeNode q = u.firstEdge;
261+
while(q!=null)
262+
{
263+
q=q.nextEdge;
264+
out++;
265+
}
266+
return out;
267+
}
268+
269+
/*Returns number of edges coming to vertex s*/
270+
public int inDegree(String s)
271+
{
272+
VertexNode u = findVertex(s);
273+
if(u==null)
274+
throw new IllegalArgumentException("Vertex not present");
275+
276+
int in=0;
277+
for(VertexNode p=start; p!=null; p=p.nextVertex)
278+
{
279+
for(EdgeNode q=p.firstEdge; q!=null; q=q.nextEdge)
280+
if(q.endVertex.name.equals(s))
281+
in++;
282+
}
283+
return in;
284+
}
285+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /