@@ -738,6 +738,34 @@ delete_queue(q1);
738
738
</SPLITINLINE >
739
739
that takes a queue as input and prints the sequence of items in the queue.
740
740
<LABEL NAME =" ex:3_21" />
741
+ <SOLUTION >
742
+ <SNIPPET >
743
+ <REQUIRES >make_queue</REQUIRES >
744
+ <REQUIRES >modify_pointers</REQUIRES >
745
+ <REQUIRES >insert_queue</REQUIRES >
746
+ <REQUIRES >is_empty_queue</REQUIRES >
747
+ <REQUIRES >delete_queue</REQUIRES >
748
+ <EXAMPLE >ex_3_21_solution_example</EXAMPLE >
749
+ <JAVASCRIPT >
750
+ function print_queue(q) {
751
+ return display(head(q));
752
+ }
753
+ </JAVASCRIPT >
754
+ </SNIPPET >
755
+ <SNIPPET HIDE =" yes" >
756
+ <NAME >ex_3_21_solution_example</NAME >
757
+ <JAVASCRIPT >
758
+ const q1 = make_queue();
759
+ print_queue(q1); // prints: null
760
+ insert_queue(q1, "a");
761
+ print_queue(q1); // prints: ["a", null]
762
+ insert_queue(q1, "b");
763
+ print_queue(q1); // prints: ["a", ["b", null]]
764
+ delete_queue(q1);
765
+ print_queue(q1); // prints: ["b", null]
766
+ </JAVASCRIPT >
767
+ </SNIPPET >
768
+ </SOLUTION >
741
769
</EXERCISE >
742
770
743
771
<EXERCISE >
@@ -786,6 +814,76 @@ function make_queue() {
786
814
and provide implementations of the queue operations using this
787
815
representation.
788
816
<LABEL NAME =" ex:3_22" />
817
+ <SOLUTION >
818
+ <SNIPPET >
819
+ <EXAMPLE >ex_3_22_example</EXAMPLE >
820
+ <JAVASCRIPT >
821
+ // provided by GitHub user devinryu
822
+
823
+ function make_queue() {
824
+ let front_ptr = null;
825
+ let rear_ptr = null;
826
+ function is_empty_queue() {
827
+ return is_null(front_ptr);
828
+ }
829
+ function insert_queue(item) {
830
+ let new_pair = pair(item, null);
831
+ if (is_empty_queue()) {
832
+ front_ptr = new_pair;
833
+ rear_ptr = new_pair;
834
+ } else {
835
+ set_tail(rear_ptr, new_pair);
836
+ rear_ptr = new_pair;
837
+ }
838
+ }
839
+ function delete_queue() {
840
+ if (is_empty_queue()) {
841
+ error("FRONT called with an empty queue");
842
+ } else {
843
+ front_ptr = tail(front_ptr);
844
+ }
845
+ }
846
+ function print_queue() {
847
+ display(front_ptr);
848
+ }
849
+ function dispatch(m) {
850
+ return m === "insert_queue"
851
+ ? insert_queue
852
+ : m === "delete_queue"
853
+ ? delete_queue
854
+ : m === "is_empty_queue"
855
+ ? is_empty_queue
856
+ : m === "print_queue"
857
+ ? print_queue
858
+ : error(m, "Unknow operation -- DISPATCH");
859
+ }
860
+ return dispatch;
861
+ }
862
+ function insert_queue(queue, item) {
863
+ return queue("insert_queue")(item);
864
+ }
865
+ function delete_queue(queue) {
866
+ return queue("delete_queue")();
867
+ }
868
+ function print_queue(queue) {
869
+ return queue("print_queue")();
870
+ }
871
+ </JAVASCRIPT >
872
+ </SNIPPET >
873
+ <SNIPPET HIDE =" yes" >
874
+ <NAME >ex_3_22_example</NAME >
875
+ <JAVASCRIPT >
876
+ const q = make_queue();
877
+ print_queue(q); // prints: null
878
+ insert_queue(q, "a");
879
+ print_queue(q); // prints: ["a", null]
880
+ insert_queue(q, "b");
881
+ print_queue(q); // prints: ["a", ["b", null]]
882
+ delete_queue(q);
883
+ print_queue(q); // prints: ["b", null]
884
+ </JAVASCRIPT >
885
+ </SNIPPET >
886
+ </SOLUTION >
789
887
</EXERCISE >
790
888
791
889
<EXERCISE >
0 commit comments