Skip to content

Commit da6ee93

Browse files
committed
fixes #804
1 parent 7b7e2a5 commit da6ee93

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed

xml/chapter3/section3/subsection2.xml

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,34 @@ delete_queue(q1);
738738
</SPLITINLINE>
739739
that takes a queue as input and prints the sequence of items in the queue.
740740
<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>
741769
</EXERCISE>
742770

743771
<EXERCISE>
@@ -786,6 +814,74 @@ function make_queue() {
786814
and provide implementations of the queue operations using this
787815
representation.
788816
<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>
789885
</EXERCISE>
790886

791887
<EXERCISE>

0 commit comments

Comments
 (0)