Skip to content

Commit 9d4ccbd

Browse files
authored
fixes #804 (#1011)
* fixes #804 * credit
1 parent 59a3725 commit 9d4ccbd

File tree

1 file changed

+98
-0
lines changed

1 file changed

+98
-0
lines changed

xml/chapter3/section3/subsection2.xml

Lines changed: 98 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,76 @@ 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+
// 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>
789887
</EXERCISE>
790888

791889
<EXERCISE>

0 commit comments

Comments
 (0)