Presentation laddar. Vänta.

Presentation laddar. Vänta.

Länkade listor á la C/C++

Liknande presentationer


En presentation över ämnet: "Länkade listor á la C/C++"— Presentationens avskrift:

1 Länkade listor á la C/C++

2 // i Java public class ListNode { public char element; public ListNode next; } // i C/C++ struct ListNode { char element; ListNode *next; };

3 public class Lists { public static ListNode toList(String chars) public static ListNode copy(ListNode l) public static ListNode removeAll(ListNode l,char c) // Laboration 3 public static String toString(ListNode l) public static boolean contains(ListNode l,char c) public static ListNode copyUpperCase(ListNode l) public static ListNode addFirst(ListNode l,char c) private static ListNode getLastNode(ListNode l) public static ListNode addLast(ListNode l,char c) public static void concat(ListNode l1,ListNode l2) public static void addAll(ListNode l1,ListNode l2) public static ListNode reverse(ListNode l) }

4 Exempel på användning Listnode l1,l2,l3,l4;
l1 = Lists.toList("XabIdRXA7pX"); l2 = Lists.copy(l1); Lists.removeAll(l2,'X'); Lists.addFirst(Lists.addLast(l2,'P'),'S'); l3 = Lists.copyUpperCase(l2); l4 = Lists.reverse(l3); l1: [’X’,’a’,’b’,’I’,’d’,’R’,’X’,’A’,’7’,’p’,’X’] l1: [’X’,’a’,’b’,’I’,’d’,’R’,’X’,’A’,’7’,’p’,’X’] l2: [’a’,’b’,’I’,’d’,’R’,’A’,’7’,’p’] l2: [’S’,’a’,’b’,’I’,’d’,’R’,’A’,’7’,’p’,’P’] l3: [’S’,’I’,’R’,’A’,’P’] l3: [’S’,’I’,’R’,’A’,’P’] l4: [’P’,’A’,’R’,’I’,’S’]

5 toList x y public static ListNode toList(String chars) {
head ptr1 y ptr1 head x public static ListNode toList(String chars) { ListNode head,ptr1; // head pekar alltid på listans huvud head = new ListNode(); // Listans huvud (innehåller ej data) head.next = null; // Avsluta listan ptr1 = head; // ptr1 pekar alltid på sista noden // Bygg en lista av tecken, x,y,z,... for ( int i = 0; i < chars.length(); i++ ) { char c = chars.charAt(i); ptr1.next = new ListNode(); // Addera en ny nod sist ptr1 = ptr1.next; // Flytta fram till nya noden ptr1.element = c; // Sätt in tecknet ptr1.next = null; // Avsluta listan } return head;

6 copy y l x z ptr2 ptr2 ptr2 ptr2 head x y z ptr1 ptr1 ptr1 ptr1

7 copy public static ListNode copy(ListNode l) {
ListNode head,ptr1,ptr2; head = new ListNode(); // Kopian head.next = null; ptr1 = head; ptr2 = l.next; // första listelementet i originallistan while ( ptr2 != null ) { ptr1.next = new ListNode(); // Ny nod i kopian ptr1 = ptr1.next; // Flytta fram ptr1.element = ptr2.element; // Kopiera tecknet ptr1.next = null; // Avsluta listan ptr2 = ptr2.next; // Flytta fram i originallistan } return head;

8 removeAll // Ta bort alla noder som innehåller c ur l
public static ListNode removeAll(ListNode l,char c) { ListNode p = l; // p pekar alltid på noden bakom aktuell nod while ( p.next != null ) { ListNode temp = p.next; // Handtag på aktuell nod if ( temp.element == c ) // Skall den tas bort? p.next = temp.next; // Länka förbi else p = p.next; // Nej, gå vidare * } * p får ej flyttas om den efterföljande noden togs bort! return l;

9 Automatisk testning Regressionstestning JUnit BlueJ stöder JUnit
Upprepade test efter kodförändringar JUnit Ett javaramverk för automatisk regressionstestning Varje klass har en testklass BlueJ stöder JUnit Testa detta i lab 3!

10 En testklass för Lists public class JunitListTest {
public void testEquals() public void testCopy() public void testRemoveAll() public void testToString() public void testContains() public void testCopyUpperCase() public void testAddFirst() public void testAddLast() public void testConcat() public void testAddAll() public void testReverse() }


Ladda ner ppt "Länkade listor á la C/C++"

Liknande presentationer


Google-annonser