commit
3961bd29a9
4 changed files with 598 additions and 0 deletions
@ -0,0 +1,67 @@ |
|||||
|
// The CharStack class that implements a stack of characters |
||||
|
// Xiwei Wang |
||||
|
|
||||
|
public class CharStack |
||||
|
{ |
||||
|
// instance variables |
||||
|
private char[] m_array; |
||||
|
private int m_index; |
||||
|
|
||||
|
// constructor |
||||
|
public CharStack(int cap) |
||||
|
{ |
||||
|
m_array = new char[cap]; |
||||
|
m_index = 0; |
||||
|
} |
||||
|
|
||||
|
// check whether the stack is empty |
||||
|
public boolean isEmpty() |
||||
|
{ |
||||
|
if (m_index == 0) |
||||
|
return true; |
||||
|
else |
||||
|
return false; |
||||
|
} |
||||
|
|
||||
|
// return the element at the top of the stack |
||||
|
public char top() |
||||
|
{ |
||||
|
if (isEmpty()) |
||||
|
throw new RuntimeException("top attempted on an empty stack"); |
||||
|
else |
||||
|
return m_array[m_index - 1]; |
||||
|
} |
||||
|
|
||||
|
// push a character onto the stack |
||||
|
public void push(char c) |
||||
|
{ |
||||
|
m_array[m_index] = c; |
||||
|
m_index++; |
||||
|
} |
||||
|
|
||||
|
// remove and return the element at the top of the stack |
||||
|
public char pop() |
||||
|
{ |
||||
|
if (isEmpty()) |
||||
|
throw new RuntimeException("pop attempted on an empty stack"); |
||||
|
else |
||||
|
{ |
||||
|
char c = m_array[m_index - 1]; |
||||
|
m_index--; |
||||
|
|
||||
|
return c; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
// return a string representation of the stack |
||||
|
@Override |
||||
|
public String toString() |
||||
|
{ |
||||
|
String stackContent = ""; |
||||
|
|
||||
|
for (int i = m_index - 1; i >= 0; i--) |
||||
|
stackContent += m_array[i]; |
||||
|
|
||||
|
return stackContent; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,33 @@ |
|||||
|
// The LNode class that represents a node in linked lists |
||||
|
// Do not make any changes to this file! |
||||
|
// Xiwei Wang |
||||
|
|
||||
|
public class LNode |
||||
|
{ |
||||
|
// instance variables |
||||
|
private int m_info; |
||||
|
private LNode m_link; |
||||
|
|
||||
|
// constructor |
||||
|
public LNode(int info) |
||||
|
{ |
||||
|
m_info = info; |
||||
|
m_link = null; |
||||
|
} |
||||
|
|
||||
|
// member methods |
||||
|
public void setLink(LNode link) |
||||
|
{ |
||||
|
m_link = link; |
||||
|
} |
||||
|
|
||||
|
public LNode getLink() |
||||
|
{ |
||||
|
return m_link; |
||||
|
} |
||||
|
|
||||
|
public int getInfo() |
||||
|
{ |
||||
|
return m_info; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,46 @@ |
|||||
|
// The RecursiveMethods class that implements several recursive solutions |
||||
|
// Your name here |
||||
|
|
||||
|
public class RecursiveMethods |
||||
|
{ |
||||
|
// This method calls the sumSquareRec method and returns the sum of the |
||||
|
// squares of the elements in the array. |
||||
|
public int sumSquares(int[] A) |
||||
|
{ |
||||
|
// Do not make any changes to this method! |
||||
|
return sumSquaresRec(A, 0); |
||||
|
} |
||||
|
|
||||
|
// This method takes an integer array as well as an integer (the starting |
||||
|
// index) and returns the sum of the squares of the elements in the array. |
||||
|
public int sumSquaresRec(int[] A, int pos) |
||||
|
{ |
||||
|
// TODO: implement this method |
||||
|
|
||||
|
return -1; // replace this statement with your own return |
||||
|
} |
||||
|
|
||||
|
// This method takes a character stack and converts all lower case letters |
||||
|
// to upper case ones. |
||||
|
public void upperStackRec(CharStack s) |
||||
|
{ |
||||
|
// TODO: implement this method |
||||
|
} |
||||
|
|
||||
|
// This method reads a string and returns the string in the reversed order. |
||||
|
public String reverseStringRec(String s) |
||||
|
{ |
||||
|
// TODO: implement this method |
||||
|
|
||||
|
return "dummy string"; // replace this statement with your own return |
||||
|
} |
||||
|
|
||||
|
// This method takes a reference to the head of a linked list. |
||||
|
// It returns the reference to the head of the linked list in the reversed order. |
||||
|
public LNode reverseListRec(LNode head) |
||||
|
{ |
||||
|
// TODO: implement this method |
||||
|
|
||||
|
return new LNode(-1); // replace this statement with your own return |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,452 @@ |
|||||
|
// Test driver for the RecursiveMethods class |
||||
|
// Do not make any changes to this file! |
||||
|
// Xiwei Wang |
||||
|
|
||||
|
import java.util.Arrays; |
||||
|
|
||||
|
public class TestRecursiveMethods |
||||
|
{ |
||||
|
public static void main(String[] args) |
||||
|
{ |
||||
|
RecursiveMethods myMethods = new RecursiveMethods(); |
||||
|
|
||||
|
int numPassedTests = 0; |
||||
|
int numTotalTests = 0; |
||||
|
String testResult; |
||||
|
|
||||
|
// Test 1 |
||||
|
numTotalTests++; |
||||
|
int iReturn = -1; |
||||
|
testResult = "[Failed]"; |
||||
|
String eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
int[] myArray = {10}; |
||||
|
iReturn = myMethods.sumSquares(myArray); |
||||
|
|
||||
|
if (iReturn == 100) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": sumSquares(10) ==> " + testResult + "\n Expected: 100" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: " + iReturn + "\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 2 |
||||
|
numTotalTests++; |
||||
|
iReturn = -1; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
int[] myArray = {10, 20, 30, 40, 50, 60}; |
||||
|
iReturn = myMethods.sumSquares(myArray); |
||||
|
|
||||
|
if (iReturn == 9100) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": sumSquares(10, 20, 30, 40, 50, 60) ==> " + testResult + "\n Expected: 9100" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: " + iReturn + "\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 3 |
||||
|
numTotalTests++; |
||||
|
CharStack s = new CharStack(5); |
||||
|
String sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
s.push('a'); |
||||
|
myMethods.upperStackRec(s); |
||||
|
sReturn = s.toString(); |
||||
|
|
||||
|
if (sReturn.equals("A")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": upperStackRec(\"a\" (from top to bottom)) ==> " + testResult + "\n Expected: \"A\" (from top to bottom)" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: \"" + sReturn + "\" (from top to bottom)\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 4 |
||||
|
numTotalTests++; |
||||
|
s = new CharStack(5); |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
s.push('7'); |
||||
|
s.push('?'); |
||||
|
s.push('p'); |
||||
|
myMethods.upperStackRec(s); |
||||
|
sReturn = s.toString(); |
||||
|
|
||||
|
if (sReturn.equals("P?7")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": upperStackRec(\"p?7\" (from top to bottom)) ==> " + testResult + "\n Expected: \"P?7\" (from top to bottom)" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: \"" + sReturn + "\" (from top to bottom)\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 5 |
||||
|
numTotalTests++; |
||||
|
s = new CharStack(5); |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
s.push('4'); |
||||
|
s.push('K'); |
||||
|
s.push('3'); |
||||
|
s.push('s'); |
||||
|
s.push('c'); |
||||
|
|
||||
|
myMethods.upperStackRec(s); |
||||
|
sReturn = s.toString(); |
||||
|
|
||||
|
if (sReturn.equals("CS3K4")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": upperStackRec(\"cs3K4\" (from top to bottom)) ==> " + testResult + "\n Expected: \"CS3K4\" (from top to bottom)" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: \"" + sReturn + "\" (from top to bottom)\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 6 |
||||
|
numTotalTests++; |
||||
|
s = new CharStack(9); |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
s.push('Z'); |
||||
|
s.push('y'); |
||||
|
s.push('X'); |
||||
|
s.push('|'); |
||||
|
s.push('E'); |
||||
|
s.push('d'); |
||||
|
s.push('C'); |
||||
|
s.push('b'); |
||||
|
s.push('A'); |
||||
|
|
||||
|
myMethods.upperStackRec(s); |
||||
|
sReturn = s.toString(); |
||||
|
|
||||
|
if (sReturn.equals("ABCDE|XYZ")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": upperStackRec(\"AbCdE|XyZ\" (from top to bottom)) ==> " + testResult + "\n Expected: \"ABCDE|XYZ\" (from top to bottom)" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: \"" + sReturn + "\" (from top to bottom)\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 7 |
||||
|
numTotalTests++; |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
String myString = ""; |
||||
|
sReturn = myMethods.reverseStringRec(myString); |
||||
|
|
||||
|
if (sReturn.equals("")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": reverseStringRec(\"\") ==> " + testResult + "\n Expected: \"\"" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: \"" + sReturn + "\"\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 8 |
||||
|
numTotalTests++; |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
String myString = "a"; |
||||
|
sReturn = myMethods.reverseStringRec(myString); |
||||
|
|
||||
|
if (sReturn.equals("a")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": reverseStringRec(\"a\") ==> " + testResult + "\n Expected: \"a\"" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: \"" + sReturn + "\"\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 9 |
||||
|
numTotalTests++; |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
String myString = "abc"; |
||||
|
sReturn = myMethods.reverseStringRec(myString); |
||||
|
|
||||
|
if (sReturn.equals("cba")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": reverseStringRec(\"abc\") ==> " + testResult + "\n Expected: \"cba\"" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: \"" + sReturn + "\"\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 10 |
||||
|
numTotalTests++; |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
String myString = "Hello, Data Structures!"; |
||||
|
sReturn = myMethods.reverseStringRec(myString); |
||||
|
|
||||
|
if (sReturn.equals("!serutcurtS ataD ,olleH")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": reverseStringRec(\"Hello, Data Structures!\") ==> " + testResult + "\n Expected: \"!serutcurtS ataD ,olleH\"" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: \"" + sReturn + "\"\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 11 |
||||
|
numTotalTests++; |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
LNode myNode = null; |
||||
|
sReturn = traverseList(myMethods.reverseListRec(myNode)); |
||||
|
|
||||
|
if (sReturn.equals("head->null")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": reverseListRec(null) ==> " + testResult + "\n Expected: head->null" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: " + sReturn + "\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 12 |
||||
|
numTotalTests++; |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
LNode myNode = new LNode(20); |
||||
|
sReturn = traverseList(myMethods.reverseListRec(myNode)); |
||||
|
|
||||
|
if (sReturn.equals("head->20->null")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": reverseListRec(20) ==> " + testResult + "\n Expected: head->20->null" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: " + sReturn + "\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 13 |
||||
|
numTotalTests++; |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
LNode myNode = new LNode(20); |
||||
|
LNode myNode1 = new LNode(30); |
||||
|
LNode myNode2 = new LNode(40); |
||||
|
myNode.setLink(myNode1); |
||||
|
myNode1.setLink(myNode2); |
||||
|
sReturn = traverseList(myMethods.reverseListRec(myNode)); |
||||
|
|
||||
|
if (sReturn.equals("head->40->30->20->null")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": reverseListRec(20->30->40) ==> " + testResult + "\n Expected: head->40->30->20->null" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: " + sReturn + "\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
// Test 14 |
||||
|
numTotalTests++; |
||||
|
sReturn = ""; |
||||
|
testResult = "[Failed]"; |
||||
|
eMsg = "N/A"; |
||||
|
try |
||||
|
{ |
||||
|
LNode myNode = new LNode(90); |
||||
|
LNode myNode1 = new LNode(80); |
||||
|
LNode myNode2 = new LNode(70); |
||||
|
LNode myNode3 = new LNode(60); |
||||
|
LNode myNode4 = new LNode(50); |
||||
|
LNode myNode5 = new LNode(40); |
||||
|
myNode.setLink(myNode1); |
||||
|
myNode1.setLink(myNode2); |
||||
|
myNode2.setLink(myNode3); |
||||
|
myNode3.setLink(myNode4); |
||||
|
myNode4.setLink(myNode5); |
||||
|
sReturn = traverseList(myMethods.reverseListRec(myNode)); |
||||
|
|
||||
|
if (sReturn.equals("head->40->50->60->70->80->90->null")) |
||||
|
{ |
||||
|
numPassedTests++; |
||||
|
testResult = "[Passed]"; |
||||
|
} |
||||
|
} |
||||
|
catch (RuntimeException e) |
||||
|
{ |
||||
|
eMsg = "RuntimeException - \"" + e.getMessage() + "\""; |
||||
|
} |
||||
|
|
||||
|
System.out.println("Test " + numTotalTests + ": reverseListRec(90->80->70->60->50->40) ==> " + testResult + "\n Expected: head->40->50->60->70->80->90->null" ); |
||||
|
if (eMsg.equals("N/A")) |
||||
|
System.out.println(" Yours: " + sReturn + "\n"); |
||||
|
else |
||||
|
System.out.println(" Yours: " + eMsg + "\n"); |
||||
|
|
||||
|
System.out.println("Total test cases: " + numTotalTests + "\nCorrect: " + numPassedTests + "\nWrong: " + (numTotalTests - numPassedTests)); |
||||
|
} |
||||
|
|
||||
|
public static String traverseList(LNode head) |
||||
|
{ |
||||
|
String listContent = "head->"; |
||||
|
LNode current = head; |
||||
|
|
||||
|
while (current != null) |
||||
|
{ |
||||
|
listContent += current.getInfo() + "->"; |
||||
|
current = current.getLink(); |
||||
|
} |
||||
|
|
||||
|
listContent += "null"; |
||||
|
|
||||
|
return listContent; |
||||
|
} |
||||
|
|
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue