@@ -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,74 @@ 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
+ function make_queue() {
822
+ let front_ptr = null;
823
+ let rear_ptr = null;
824
+ function is_empty_queue() {
825
+ return is_null(front_ptr);
826
+ }
827
+ function insert_queue(item) {
828
+ let new_pair = pair(item, null);
829
+ if (is_empty_queue()) {
830
+ front_ptr = new_pair;
831
+ rear_ptr = new_pair;
832
+ } else {
833
+ set_tail(rear_ptr, new_pair);
834
+ rear_ptr = new_pair;
835
+ }
836
+ }
837
+ function delete_queue() {
838
+ if (is_empty_queue()) {
839
+ error("FRONT called with an empty queue");
840
+ } else {
841
+ front_ptr = tail(front_ptr);
842
+ }
843
+ }
844
+ function print_queue() {
845
+ display(front_ptr);
846
+ }
847
+ function dispatch(m) {
848
+ return m === "insert_queue"
849
+ ? insert_queue
850
+ : m === "delete_queue"
851
+ ? delete_queue
852
+ : m === "is_empty_queue"
853
+ ? is_empty_queue
854
+ : m === "print_queue"
855
+ ? print_queue
856
+ : error(m, "Unknow operation -- DISPATCH");
857
+ }
858
+ return dispatch;
859
+ }
860
+ function insert_queue(queue, item) {
861
+ return queue("insert_queue")(item);
862
+ }
863
+ function delete_queue(queue) {
864
+ return queue("delete_queue")();
865
+ }
866
+ function print_queue(queue) {
867
+ return queue("print_queue")();
868
+ }
869
+ </JAVASCRIPT >
870
+ </SNIPPET >
871
+ <SNIPPET HIDE =" yes" >
872
+ <NAME >ex_3_22_example</NAME >
873
+ <JAVASCRIPT >
874
+ const q = make_queue();
875
+ print_queue(q); // prints: null
876
+ insert_queue(q, "a");
877
+ print_queue(q); // prints: ["a", null]
878
+ insert_queue(q, "b");
879
+ print_queue(q); // prints: ["a", ["b", null]]
880
+ delete_queue(q);
881
+ print_queue(q); // prints: ["b", null]
882
+ </JAVASCRIPT >
883
+ </SNIPPET >
884
+ </SOLUTION >
789
885
</EXERCISE >
790
886
791
887
<EXERCISE >
0 commit comments