Lab 3
来源:互联网 发布:以色列 科技 知乎 编辑:程序博客网 时间:2024/05/05 16:10
/* SListNode.java *//** * SListNode is a class used internally by the SList class. An SList object * is a singly-linked list, and an SListNode is a node of a singly-linked * list. Each SListNode has two references: one to an object, and one to * the next node in the list. * * @author Kathy Yelick and Jonathan Shewchuk */class SListNode { Object item; SListNode next;/** * SListNode() (with one parameter) constructs a list node referencing the * item "obj". */ public SListNode(Object obj) { item = obj; next = null; } /** * SListNode() (with two parameters) constructs a list node referencing the * item "obj", whose next list node is to be "next". */ public SListNode(Object obj, SListNode next) { item = obj; this.next = next; }}/* TestHelper.java */ /** * This class is based on code from Arnow/Dexter/Weiss. Its verify() method * exits with an error message if an invariant fails to hold true. * * The purpose of this class is to provide a shorthand for writing and testing * invariants in any program. **/class TestHelper { /** * verify() checks an invariant and prints an error message if it fails. * If invariant is true, this method does nothing. If invariant is false, * the message is printed, followed by a dump of the program call stack. * * @param invariant the condition to be verified * @param message the error message to be printed if the invariant fails to * hold true. **/ static void verify(boolean invariant, String message) { if (!invariant) { System.out.println("*** ERROR: " + message); Thread.dumpStack(); } }}/* SList.java *//** * The SList class is a singly-linked implementation of the linked list * abstraction. SLists are mutable data structures, which can grow at either * end. * * @author Kathy Yelick and Jonathan Shewchuk **/public class SList { private SListNode head; private SListNode tail; private int size; /** * SList() constructs an empty list. **/ public SList() { size = 0; head = null; tail = null; } /** * isEmpty() indicates whether the list is empty. * @return true if the list is empty, false otherwise. **/ public boolean isEmpty() { return size == 0; } /** * length() returns the length of this list. * @return the length of this list. **/ public int length() { return size; } /** * insertFront() inserts item "obj" at the beginning of this list. * @param obj the item to be inserted. **/ public void insertFront(Object obj) { head = new SListNode(obj, head); if(size == 0){ tail = head; } size++; } /** * insertEnd() inserts item "obj" at the end of this list. * @param obj the item to be inserted. **/ public void insertEnd(Object obj){ if(size == 0){ tail = new SListNode(obj); head = tail; }else{ tail.next = new SListNode(obj); tail = tail.next; } size++; } /** * nth() returns the item at the specified position. If position < 1 or * position > this.length(), null is returned. Otherwise, the item at * position "position" is returned. The list does not change. * @param position the desired position, from 1 to length(), in the list. * @return the item at the given position in the list. **/ public Object nth(int position) { SListNode currentNode; if ((position < 1) || (head == null)) { return null; } else { currentNode = head; while (position > 1) { currentNode = currentNode.next; if (currentNode == null) { return null; } position--; } return currentNode.item; } } /** * toString() converts the list to a String. * @return a String representation of the list. **/ public String toString() { int i; Object obj; String result = "[ "; SListNode cur = head; while (cur != null) { obj = cur.item; result = result + obj.toString() + " "; cur = cur.next; } result = result + "]"; return result; } /** * main() runs test cases on the SList class. Prints summary * information on basic operations and halts with an error (and a stack * trace) if any of the tests fail. **/ public static void main (String[] args) { // Fill in your solution for Part I here. SList ls = new SList(); ls.insertFront(new Integer(12)); ls.insertFront(new Integer(9)); ls.insertFront(new Integer(6)); System.out.println("Here is a list after construction : " + ls.toString()); ls.insertFront(new Integer(3)); ls.insertEnd(new Integer(15)); System.out.println(); System.out.println("Here is a list after changing the list : " + ls.toString()); testEmpty(); testAfterInsertFront(); testAfterInsertEnd(); } /** * testEmpty() tests toString(), isEmpty(), length(), insertFront(), and * insertEnd() on an empty list. Prints summary information of the tests * and halts the program if errors are detected. **/ private static void testEmpty() { SList lst1 = new SList(); SList lst2 = new SList(); System.out.println(); System.out.println("Here is a list after construction: " + lst1.toString()); TestHelper.verify(lst1.toString().equals("[ ]"), "toString on newly constructed list failed"); System.out.println("isEmpty() should be true. It is: " + lst1.isEmpty()); TestHelper.verify(lst1.isEmpty() == true, "isEmpty() on newly constructed list failed"); System.out.println("length() should be 0. It is: " + lst1.length()); TestHelper.verify(lst1.length() == 0, "length on newly constructed list failed"); lst1.insertFront(new Integer(3)); System.out.println("Here is a list after insertFront(3) to an empty list: " + lst1.toString()); TestHelper.verify(lst1.toString().equals("[ 3 ]"), "InsertFront on empty list failed"); lst2.insertEnd(new Integer(5)); System.out.println("Here is a list after insertEnd(5) on an empty list: " + lst2.toString()); TestHelper.verify(lst2.toString().equals("[ 5 ]"), "insertEnd on empty list failed"); } /** * testAfterInsertFront() tests toString(), isEmpty(), length(), * insertFront(), and insertEnd() after insertFront(). Prints summary * information of the tests and halts the program if errors are detected. **/ private static void testAfterInsertFront() { SList lst1 = new SList(); lst1.insertFront(new Integer(3)); lst1.insertFront(new Integer(2)); lst1.insertFront(new Integer(1)); System.out.println(); System.out.println("Here is a list after insertFront 3, 2, 1: " + lst1.toString()); TestHelper.verify(lst1.toString().equals("[ 1 2 3 ]"), "InsertFronts on non-empty list failed"); System.out.println("isEmpty() should be false. It is: " + lst1.isEmpty()); TestHelper.verify(lst1.isEmpty() == false, "isEmpty() after insertFront failed"); System.out.println("length() should be 3. It is: " + lst1.length()); TestHelper.verify(lst1.length() == 3, "length() after insertFront failed"); lst1.insertEnd(new Integer(4)); System.out.println("Here is the same list after insertEnd(4): " + lst1.toString()); TestHelper.verify(lst1.toString().equals("[ 1 2 3 4 ]"), "insertEnd on non-empty list failed"); } /** * testAfterInsertEnd() tests toString(), isEmpty(), length(), * insertFront(), and insertEnd() after insertEnd(). Prints summary * information of the tests and halts the program if errors are detected. **/ private static void testAfterInsertEnd() { SList lst1 = new SList(); lst1.insertEnd(new Integer(6)); lst1.insertEnd(new Integer(7)); System.out.println(); System.out.println("Here is a list after insertEnd 6, 7: " + lst1.toString()); System.out.println("isEmpty() should be false. It is: " + lst1.isEmpty()); TestHelper.verify(lst1.isEmpty() == false, "isEmpty() after insertEnd failed"); System.out.println("length() should be 2. It is: " + lst1.length()); TestHelper.verify(lst1.length() == 2, "length() after insertEndfailed"); lst1.insertFront(new Integer(5)); System.out.println("Here is the same list after insertFront(5): " + lst1.toString()); TestHelper.verify(lst1.toString().equals("[ 5 6 7 ]"), "insertFront after insertEnd failed"); } }
0 0
- Lab 3
- LAB 3
- Lab 3: Privilege Separation
- Lab 3:自行车码表
- Lab 3:自行车码表
- 213 lab 3 attacklab
- # Software-eng lab 3
- Lab 3:Git实战
- Lab
- LAB
- [Lab Week] 2->3->4
- JOS——Lab 3
- CSAPP 3e Attack lab
- CSAPP: Bomb Lab(3)
- 嵌入式 LAB 3:自行车码表
- Lab 3:优先级抢占调度
- 组内挑战赛:Lab 3
- Lab 3: Adding Views and Unit Testing
- Maximum Subarray 解题报告
- 商品管理service和controller
- [Leetcode] Path Sum I,II,III
- 线性方程组 精确解 近似解 算法整理
- 虚拟存储器
- Lab 3
- 【HTML】碎片知识点-02
- 专业人士对指针的精解
- 数列的逆序数对(难度系数:2颗星)
- 我所理解的MVC架构
- Python学习之While循环
- 创建临时表空间组+查询临时表空间组+临时表空间移动到别的临时表空间组中
- C输入流scanf()
- CSS编码意见