2023-11-09 18:46:31 -06:00

239 lines
14 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>CircularList.java</title>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style type="text/css">
<!--
body {color: #a9b7c6; background-color: #2b2b2b; font-family: monospace}
pre {color: #a9b7c6; background-color: #2b2b2b; font-family: monospace}
table {color: #888888; background-color: #313335; font-family: monospace}
.ST1 {color: #9876aa}
.ST2 {color: #ffc66d}
.number {color: #6897bb}
.string {color: #6a8759}
.whitespace {color: #505050}
.comment {color: #808080}
.ST4 {color: #9876aa; font-family: monospace; font-style: italic}
.ST5 {color: #ffc66d; font-family: monospace; font-style: italic}
.ST0 {color: #808080; font-family: monospace; font-weight: bold}
.ST3 {color: #8a653b}
.literal {color: #cc7832}
-->
</style>
</head>
<body>
<table width="100%"><tr><td align="center">/home/caleb/ASDV-Java/Semester 3/Assignments/MP6_CalebFontenot/src/main/java/edu/slcc/asdv/caleb/mp6_calebfontenot/CircularList.java</td></tr></table>
<pre>
<span class="literal">package</span> edu.slcc.asdv.caleb.mp6_calebfontenot;
<span class="comment">/**</span>
<span class="comment"> *</span>
<span class="comment"> * </span><span class="ST0">@author</span> <span class="comment">Markou</span>
<span class="comment">*/</span>
<span class="literal">public</span> <span class="literal">class</span> CircularList&lt;T <span class="literal">extends</span> Comparable&lt;T&gt;&gt; {
Node&lt;T&gt; <span class="ST1">head</span>;
<span class="literal">public</span> <span class="literal">class</span> Node&lt; T <span class="literal">extends</span> Comparable&lt;T&gt;&gt;
<span class="literal">implements</span> Comparable&lt;Node&lt;T&gt;&gt; {
<span class="literal">private</span> T <span class="ST1">t</span>;
<span class="literal">public</span> <span class="literal">void</span> <span class="ST2">set</span>(T t)
{
<span class="literal">this</span>.<span class="ST1">t</span> = t;
}
<span class="literal">public</span> T <span class="ST2">get</span>()
{
<span class="literal">return</span> <span class="ST1">t</span>;
}
Node&lt;T&gt; <span class="ST1">next</span>;
@Override
<span class="literal">public</span> <span class="literal">int</span> <span class="ST2">compareTo</span>(Node&lt;T&gt; o)
{
<span class="literal">return</span> <span class="literal">this</span>.<span class="ST1">t</span>.compareTo(o.get());
}
}
<span class="comment">/**</span>
<span class="comment"> *</span>
<span class="comment"> * </span><span class="ST0">@param</span> <span class="ST3">t</span>
<span class="comment">*/</span>
<span class="literal">public</span> <span class="literal">void</span> <span class="ST2">add</span>(Object t)
{
Node&lt;T&gt; temp = <span class="literal">new</span> Node();
temp.set((T) t);
<span class="literal">if</span> (<span class="ST1">head</span> == <span class="literal">null</span>) {
<span class="ST1">head</span> = temp;
<span class="ST1">head</span>.<span class="ST1">next</span> = <span class="ST1">head</span>;
} <span class="literal">else</span> {
Node&lt;T&gt; temp2 = <span class="ST1">head</span>;
<span class="literal">do</span> {
temp2 = temp2.<span class="ST1">next</span>;
} <span class="literal">while</span> (temp2.<span class="ST1">next</span> != <span class="ST1">head</span>);
temp.<span class="ST1">next</span> = <span class="ST1">head</span>;
temp2.<span class="ST1">next</span> = temp;
}
}
<span class="comment">/**</span>
<span class="comment"> *</span>
<span class="comment"> * </span><span class="ST0">@return</span>
<span class="comment">*/</span>
<span class="literal">private</span> <span class="literal">int</span> <span class="ST2">getSize</span>()
{
<span class="literal">if</span> (<span class="ST1">head</span> == <span class="literal">null</span>) {
<span class="literal">return</span> <span class="number">0</span>;
}
Node&lt;T&gt; temp = <span class="ST1">head</span>;
<span class="literal">int</span> count = <span class="number">0</span>;
<span class="literal">do</span> {
temp = temp.<span class="ST1">next</span>;
count++;
} <span class="literal">while</span> (temp != <span class="ST1">head</span>);
<span class="literal">return</span> count;
}
<span class="comment">////////////////////////////////////////////////////////</span>
<span class="literal">public</span> <span class="literal">void</span> <span class="ST2">addAt</span>(Object t, <span class="literal">int</span> pos)
{
<span class="literal">if</span> (pos &lt; <span class="number">0</span> || pos &gt; getSize()) {
<span class="literal">return</span>;
}
Node&lt;T&gt; temp = <span class="literal">new</span> Node();
temp.set((T) t);
<span class="literal">if</span> (<span class="ST1">head</span> == <span class="literal">null</span>) {
add(t);
} <span class="literal">else</span> <span class="literal">if</span> (pos == <span class="number">0</span>) {
<span class="literal">int</span> oldSize = getSize();
Node&lt;T&gt; <span class="comment">currentHead</span> = <span class="ST1">head</span>;
temp.<span class="ST1">next</span> = <span class="ST1">head</span>;
<span class="ST1">head</span> = temp;
<span class="comment">// Set the node at the end of the list to point back to the new head.</span>
Node&lt;T&gt; pointer = <span class="ST1">head</span>;
<span class="literal">for</span> (<span class="literal">int</span> i = <span class="number">0</span>; i &lt; oldSize; ++i) {
pointer = pointer.<span class="ST1">next</span>;
}
pointer.<span class="ST1">next</span> = temp;
} <span class="literal">else</span> {
<span class="comment">// Iterate to the desired position</span>
Node&lt;T&gt; pointer = <span class="ST1">head</span>;
<span class="literal">for</span> (<span class="literal">int</span> i = <span class="number">0</span>; i &lt; pos -<span class="number">1</span>; ++i) {
pointer = pointer.<span class="ST1">next</span>;
}
temp.<span class="ST1">next</span> = pointer.<span class="ST1">next</span>;
pointer.<span class="ST1">next</span> = temp;
}
}
<span class="comment">//////////////////////////////////////////////////////////////</span>
<span class="comment">/**</span>
<span class="comment"> * </span><span class="comment">removes</span> <span class="comment">the</span> <span class="comment">last</span> <span class="comment">node</span>
<span class="comment">*/</span>
<span class="literal">public</span> <span class="literal">void</span> <span class="ST2">remove</span>()
{
Node&lt;T&gt; pointer = <span class="ST1">head</span>;
<span class="literal">for</span> (<span class="literal">int</span> i = <span class="number">0</span>; i &lt; <span class="literal">this</span>.getSize() - <span class="number">2</span>; ++i) {
pointer = pointer.<span class="ST1">next</span>;
}
pointer.<span class="ST1">next</span> = <span class="ST1">head</span>;
}
<span class="comment">//////////////////////////////////////////////////////////////</span>
<span class="comment">/**</span>
<span class="comment"> * </span><span class="comment">removes</span> <span class="comment">a</span> <span class="comment">specific</span> <span class="comment">object</span> <span class="comment">from</span> <span class="comment">the</span> <span class="comment">list</span>
<span class="comment">*/</span>
<span class="literal">public</span> <span class="literal">boolean</span> <span class="ST2">remove</span>(Object t)
{
Node&lt;T&gt; pointer = <span class="ST1">head</span>;
<span class="literal">boolean</span> isObjectRemoved = <span class="literal">false</span>;
<span class="literal">do</span> {
<span class="literal">boolean</span> eval = pointer.<span class="ST1">next</span>.<span class="ST1">t</span>.equals(t);
<span class="literal">if</span> (eval) {
isObjectRemoved = <span class="literal">true</span>;
pointer.<span class="ST1">next</span> = pointer.<span class="ST1">next</span>.<span class="ST1">next</span>;
<span class="literal">break</span>;
} <span class="literal">else</span> {
pointer = pointer.<span class="ST1">next</span>;
}
} <span class="literal">while</span> (pointer != <span class="ST1">head</span>);
<span class="literal">return</span> isObjectRemoved;
}
<span class="comment">//////////////////////////////////////////////////////////////</span>
<span class="literal">public</span> <span class="literal">void</span> <span class="ST2">removeAt</span>(<span class="literal">int</span> pos)
{
Node&lt;T&gt; pointer = <span class="ST1">head</span>;
<span class="literal">for</span> (<span class="literal">int</span> i = <span class="number">0</span>; i &lt; pos; ++i) {
<span class="literal">boolean</span> eval = i == pos - <span class="number">1</span>;
<span class="literal">if</span> (eval) {
pointer.<span class="ST1">next</span> = pointer.<span class="ST1">next</span>.<span class="ST1">next</span>;
<span class="literal">break</span>;
} <span class="literal">else</span> {
pointer = pointer.<span class="ST1">next</span>;
}
}
}
<span class="literal">public</span> <span class="literal">void</span> <span class="ST2">print</span>()
{
<span class="literal">if</span> (<span class="ST1">head</span> == <span class="literal">null</span>) {
<span class="literal">return</span>;
}
Node&lt;T&gt; temp = <span class="ST1">head</span>;
<span class="literal">int</span> elementNum = <span class="number">0</span>;
<span class="literal">do</span> {
System.<span class="ST4">out</span>.print(++elementNum + <span class="string">&quot;</span><span class="string">: </span><span class="string">&quot;</span>);
System.<span class="ST4">out</span>.println(temp.get().toString());
temp = temp.<span class="ST1">next</span>;
} <span class="literal">while</span> (temp != <span class="ST1">head</span>);
}
<span class="literal">public</span> <span class="literal">static</span> <span class="literal">void</span> <span class="ST5">main</span>(String... ar)
{
CircularList&lt;String&gt; list = <span class="literal">new</span> CircularList();
list.add(<span class="string">&quot;</span><span class="string">Hello</span><span class="string">&quot;</span>);
list.add(<span class="string">&quot;</span><span class="string">World</span><span class="string">&quot;</span>);
list.add(<span class="string">&quot;</span><span class="string">one</span><span class="string">&quot;</span>);
String removeMe = <span class="string">&quot;</span><span class="string">two</span><span class="string">&quot;</span>;
list.add(removeMe);
list.add(<span class="string">&quot;</span><span class="string">three</span><span class="string">&quot;</span>);
list.add(<span class="string">&quot;</span><span class="string">four</span><span class="string">&quot;</span>);
list.add(<span class="string">&quot;</span><span class="string">five</span><span class="string">&quot;</span>);
list.add(<span class="string">&quot;</span><span class="string">six</span><span class="string">&quot;</span>);
list.add(<span class="string">&quot;</span><span class="string">seven</span><span class="string">&quot;</span>);
list.print();
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">-------------</span><span class="string">&quot;</span>);
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">Remove the last object:</span><span class="string">&quot;</span>);
list.remove();
list.print();
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">-------------</span><span class="string">&quot;</span>);
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">Remove </span><span class="literal">\&quot;</span><span class="string">two</span><span class="literal">\&quot;</span><span class="string">&quot;</span>);
list.remove(removeMe);
list.print();
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">-------------</span><span class="string">&quot;</span>);
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">Remove the 3rd element:</span><span class="string">&quot;</span>);
list.removeAt(<span class="number">2</span>);
list.print();
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">-------------</span><span class="string">&quot;</span>);
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">Add an element to the beginning</span><span class="string">&quot;</span>);
list.addAt(<span class="string">&quot;</span><span class="string">Earth</span><span class="string">&quot;</span>, <span class="number">0</span>);
list.print();
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">-------------</span><span class="string">&quot;</span>);
System.<span class="ST4">out</span>.println(<span class="string">&quot;</span><span class="string">Add an element named </span><span class="literal">\&quot;</span><span class="string">potato</span><span class="literal">\&quot;</span><span class="string"> in the 4th position:</span><span class="string">&quot;</span>);
list.addAt(<span class="string">&quot;</span><span class="string">potato</span><span class="string">&quot;</span>, <span class="number">3</span>);
list.print();
}
}
</pre></body>
</html>