Commit 1460895

mo khan <mo.khan@gmail.com>
2020-07-05 00:17:50
Pretty print the doubly linked list
1 parent 7c7704b
src/01/02b/doubly_linked_list.c
@@ -92,21 +92,22 @@ Node *reverse(Node *head) {
 
 static void print(Node *node) {
   if (node->prev && node->next)
-    printf("%d <- %d -> %d\n", node->prev->data, node->data, node->next->data);
+    printf("(%d<%d>%d)", node->prev->data, node->data, node->next->data);
   else if (node->next)
-    printf("nil <- %d -> %d\n", node->data, node->next->data);
+    printf("(nil<%d>%d)", node->data, node->next->data);
   else
-    printf("%d <- %d -> nil\n", node->prev->data, node->data);
+    printf("(%d<%d>nil)", node->prev->data, node->data);
 }
 
-static void inspect(Node *node) {
+void inspect(Node *node) {
   if (!node) return;
 
-  printf("*******\n");
+  printf("[ ");
   while (node) {
     print(node);
+    printf(" ");
     node = node->next;
   }
-  printf("*******\n");
+  printf("]\n");
 }
 
src/01/02b/doubly_linked_list.h
@@ -11,3 +11,4 @@ Node *add(Node *head, int data);
 Node *get(Node *from, int index);
 void swap(Node *x, Node *y);
 Node *reverse(Node *head);
+void inspect(Node *node);
src/01/02b/main.c
@@ -10,6 +10,25 @@ int main(int argc, char *argv[])
 {
   printf("=== COMP-272 - Assignment 1 - Question 2b ===\n");
   Node *head = initialize(next());
+  Node *new_head = NULL;
+
+  for (int i = 0; i < 9; ++i)
+    add(head, next());
+
+  printf("\t");
+  inspect(head);
+
+  new_head = get(head, 1);
+  swap(head, new_head);
+  head = new_head;
+  printf("swap: 0,1\n\t");
+  inspect(head);
+
+  for (int i = 2; i < 10; i+=2) {
+    swap(get(head, i), get(head, i + 1));
+    printf("swap: %d,%d\n\t", i, i + 1);
+    inspect(head);
+  }
 
   return 0;
 }
src/01/02b/README.md
@@ -9,5 +9,40 @@ Swap two adjacent elements in a list by adjusting only the links (and not the da
 
 ## Description of the Code
 ## Errors and Warnings
+
+```bash
+モ make run_test
+mkdir build
+clang    -c -o build/doubly_linked_list.o doubly_linked_list.c
+clang    -c -o build/doubly_linked_list_test.o doubly_linked_list_test.c
+clang build/doubly_linked_list.o build/doubly_linked_list_test.o -lcgreen -o build/test
+Running "main" (22 tests)...
+  "swap_doubly_linked_list_tests": 164 passes in 7ms.
+  Completed "main": 164 passes in 7ms.
+```
+
 ## Sample Input and Output
+
+The program defined in [`main.c`](./main.c) adds 10 randomly generated numbers to a
+doubly linked list then swaps it pair of nodes from index 0 to the end of the list.
+
+```bash
+モ make run
+clang    -c -o build/main.o main.c
+clang build/doubly_linked_list.o build/main.o -o build/program
+./build/program
+=== COMP-272 - Assignment 1 - Question 2b ===
+        [ (nil<83>86) (83<86>77) (86<77>15) (77<15>93) (15<93>35) (93<35>86) (35<86>92) (86<92>49) (92<49>21) (49<21>nil) ]
+swap: 0,1
+        [ (nil<86>83) (86<83>77) (83<77>15) (77<15>93) (15<93>35) (93<35>86) (35<86>92) (86<92>49) (92<49>21) (49<21>nil) ]
+swap: 2,3
+        [ (nil<86>83) (86<83>15) (83<15>77) (15<77>93) (77<93>35) (93<35>86) (35<86>92) (86<92>49) (92<49>21) (49<21>nil) ]
+swap: 4,5
+        [ (nil<86>83) (86<83>15) (83<15>77) (15<77>35) (77<35>93) (35<93>86) (93<86>92) (86<92>49) (92<49>21) (49<21>nil) ]
+swap: 6,7
+        [ (nil<86>83) (86<83>15) (83<15>77) (15<77>35) (77<35>93) (35<93>92) (93<92>86) (92<86>49) (86<49>21) (49<21>nil) ]
+swap: 8,9
+        [ (nil<86>83) (86<83>15) (83<15>77) (15<77>35) (77<35>93) (35<93>92) (93<92>86) (92<86>21) (86<21>49) (21<49>nil) ]
+```
+
 ## Discussion