⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chapter9.htm

📁 为清华大学出版社 C++课后答案
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<p class="style3">}<br>
  }</p>
<p class="style3">程序运行输出:<br>
  size of q is:4<br>
  42<br>
  100<br>
  49<br>
  201<br>
  horse<br>
  size of p is:5<br>
  cat<br>
  ape<br>
  dog<br>
  mouse<br>
  horse<br>
</p>
<p class="style3"><strong>9-12 实际应用中,双向队列比普通队列更加常用。在标准C++类库中,双向队列类(deque)的成员函数queue::assign ()给一个双向队列重新赋值,queue::swap()交换两个双向队列中的元素,queue::begin()返回指向双向队列中的第一个元素的指针,queue:: end()返回指向双向队列中的最后一个元素的指针,请构造一个整型双向队列,然后对这个队列调用以上几个函数,体会队列这种数据结构的特点和其成员函数的用法。</strong><br>
</p>
<p class="style3">解: <br>
  #include &lt;iostream&gt;<br>
  #include &lt;deque&gt;</p>
<p class="style3">using namespace std;</p>
<p class="style3">typedef deque&lt;char &gt; CHARDEQUE;<br>
  void print_contents (CHARDEQUE deque, char*);</p>
<p class="style3">void main()<br>
  {<br>
  //create a with 3 A's<br>
  CHARDEQUE a(3,'A');</p>
<p class="style3">//create b with 4 B's.<br>
  CHARDEQUE b(4,'B');</p>
<p class="style3">//print out the contents<br>
  print_contents (a,"a");<br>
  print_contents (b,"b");</p>
<p class="style3">//swap a and b<br>
  a.swap(b);<br>
  print_contents (a,"a");<br>
  print_contents (b,"b");</p>
<p class="style3">// let us swap it back<br>
  a.swap(b);<br>
  print_contents (a,"a");<br>
  print_contents (b,"b");</p>
<p class="style3">//assign the contents of b to a<br>
  a.assign(b.begin(),b.end());<br>
  print_contents (a,"a");</p>
<p class="style3">//assign the first two items of b to a<br>
  a.assign(b.begin(),b.begin()+2);<br>
  print_contents (a,"a");</p>
<p class="style3">//assign 3 'Z's to a<br>
  a.assign(3,'Z');<br>
  print_contents (a,"a");</p>
<p class="style3">}</p>
<p class="style3">//function to print the contents of deque<br>
  void print_contents (CHARDEQUE deque, char *name)<br>
  {<br>
  CHARDEQUE::iterator pdeque;</p>
<p class="style3">cout &lt;&lt;"The contents of "&lt;&lt; name &lt;&lt;" : ";</p>
<p class="style3">for(pdeque = deque.begin();<br>
  pdeque != deque.end();<br>
  pdeque++)<br>
  {<br>
  cout &lt;&lt; *pdeque &lt;&lt;" " ;<br>
  }<br>
  cout&lt;&lt;endl;<br>
  }</p>
<p class="style3">程序运行输出:<br>
  The contents of a : A A A<br>
  The contents of b : B B B B<br>
  The contents of a : B B B B<br>
  The contents of b : A A A<br>
  The contents of a : A A A<br>
  The contents of b : B B B B<br>
  The contents of a : B B B B<br>
  The contents of a : B B<br>
  The contents of a : Z Z Z<br>
</p>
<p class="style3"><strong>9-13 在标准C++类库中,双向队列类(deque)的成员函数queue::front()返回一个非空双向队列的第一个元素,queue:: back()返回一个非空双向队列的最后一个元素,请构造一个字符型双向队列,体会这几个成员函数的用法。</strong><br>
</p>
<p class="style3">解: <br>
  #include &lt;iostream&gt;<br>
  #include &lt;deque&gt;</p>
<p class="style3">using namespace std;</p>
<p class="style3">typedef deque&lt;char &gt; CHARDEQUE;<br>
  void print_contents (CHARDEQUE deque, char*);</p>
<p class="style3">void main()<br>
  {<br>
  //create a with A, B, C and D<br>
  CHARDEQUE a;<br>
  a.push_back('A');<br>
  a.push_back('B');<br>
  a.push_back('C');<br>
  a.push_back('D');</p>
<p class="style3">//print out the contents<br>
  print_contents (a,"a");</p>
<p class="style3">cout &lt;&lt;"The first element of a is " &lt;&lt;a.front() &lt;&lt;endl;</p>
<p class="style3">cout &lt;&lt;"The last element of a is " &lt;&lt;a.back() &lt;&lt;endl;</p>
<p class="style3">//now let us modify the first and last elements<br>
  //using reference ,front() and back()</p>
<p class="style3">CHARDEQUE::reference reffront=a.front();<br>
  CHARDEQUE::reference refback=a.back();</p>
<p class="style3">reffront='X';<br>
  refback='Y';</p>
<p class="style3">//print out the contents<br>
  print_contents (a,"a");</p>
<p class="style3">}</p>
<p class="style3">//function to print the contents of deque<br>
  void print_contents (CHARDEQUE deque, char *name)<br>
  {<br>
  CHARDEQUE::iterator pdeque;</p>
<p class="style3">cout &lt;&lt;"The contents of "&lt;&lt; name &lt;&lt;" : ";</p>
<p class="style3">for(pdeque = deque.begin();<br>
  pdeque != deque.end();<br>
  pdeque++)<br>
  {<br>
  cout &lt;&lt; *pdeque &lt;&lt;" " ;<br>
  }<br>
  cout&lt;&lt;endl;<br>
  }</p>
<p class="style3">程序运行输出:<br>
  The contents of a : A B C D</p>
<p class="style3">The first element of a is A</p>
<p class="style3">The last element of a is D</p>
<p class="style3">The contents of a : X B C Y</p>
<p class="style3"><strong>9-14 在标准C++类库中,双向队列类(deque)的成员函数queue::insert()往一个双向队列中插入元素,queue::push_front(const T&amp; x)往一个双向队列的头端插入一个元素,queue::pop_front()从一个双向队列的头端删除一个元素,queue::push_back(const T&amp; x)往一个双向队列的尾端插入一个元素,queue::pop_back(const T&amp; x)从一个双向队列的尾端删除一个元素,请构造一个字符型双向队列,体会这几个成员函数的用法。</strong><br>
</p>
<p class="style3">解: <br>
  #include &lt;iostream&gt;<br>
  #include &lt;deque&gt;</p>
<p class="style3">using namespace std;</p>
<p class="style3"><br>
  typedef deque&lt;char &gt; CHARDEQUE;<br>
  void print_contents (CHARDEQUE deque);</p>
<p class="style3">void main()<br>
  {<br>
  //create a with 3 A's<br>
  CHARDEQUE a(3,'A');</p>
<p class="style3">//create b with 2 B's.<br>
  CHARDEQUE b(2,'B');</p>
<p class="style3">//print out the contents<br>
  print_contents (a);<br>
  print_contents (b);</p>
<p class="style3">//insert 'X' to the beginning of a<br>
  a.insert(a.begin(),'X');<br>
  print_contents (a);</p>
<p class="style3">//insert 'Y' to the end of a<br>
  a.insert(a.end(),'Y');<br>
  print_contents (a);</p>
<p class="style3">//inset 3 'Z's to one item before the end of a<br>
  a.insert(a.end()-1,3,'Z');<br>
  print_contents (a);</p>
<p class="style3">//insert to the end of a from b<br>
  a.insert(a.end(),b.begin(),b.end());<br>
  print_contents (a);</p>
<p class="style3">}</p>
<p class="style3">//function to print the contents of deque<br>
  void print_contents (CHARDEQUE deque)<br>
  {<br>
  CHARDEQUE::iterator pdeque;</p>
<p class="style3">cout &lt;&lt;"The output is: ";</p>
<p class="style3">for(pdeque = deque.begin();<br>
  pdeque != deque.end();<br>
  pdeque++)<br>
  {<br>
  cout &lt;&lt; *pdeque &lt;&lt;" " ;<br>
  }<br>
  cout&lt;&lt;endl;<br>
  }</p>
<p class="style3">程序运行输出:<br>
  The output is: A A A<br>
  The output is: B B<br>
  The output is: X A A A<br>
  The output is: X A A A Y<br>
  The output is: X A A A Z Z Z Y<br>
  The output is: X A A A Z Z Z Y B B<br>
</p>
<p class="style3"><strong>9-15 在标准C++类库中,双向队列类(deque)的长度是可变的,成员函数resize( n, T x = T())可加长已有的双向队列对象,size() const返回队列长度,max_size() const返回系统可支持的最大双向队列长度,请构造一个字符型双向队列,体会这几个成员函数的用法。</strong><br>
</p>
<p class="style3">解: <br>
  #include &lt;iostream&gt;<br>
  #include &lt;deque&gt;</p>
<p class="style3">using namespace std;</p>
<p class="style3"><br>
  typedef deque&lt;char &gt; CHARDEQUE;<br>
  void print_contents (CHARDEQUE deque, char*);</p>
<p class="style3">void main()<br>
  {<br>
  //create a with A, B, C and D<br>
  CHARDEQUE a;<br>
  a.push_back('A');<br>
  a.push_back('B');<br>
  a.push_back('C');<br>
  a.push_back('D');</p>
<p class="style3">//print out the contents</p>
<p class="style3">print_contents (a,"a");<br>
  cout &lt;&lt;"max_size of a is " &lt;&lt;a.max_size() &lt;&lt;endl;<br>
  cout &lt;&lt;"size of a is " &lt;&lt;a.size() &lt;&lt;endl;</p>
<p class="style3">//let us increase the size to 10<br>
  // and set the new elements to be 'X'<br>
  a.resize(10,'X');<br>
  print_contents (a,"a");<br>
  cout &lt;&lt;"size of a is " &lt;&lt;a.size() &lt;&lt;endl;</p>
<p class="style3">//let us resize it to 5<br>
  a.resize(5);<br>
  print_contents (a,"a");<br>
  cout &lt;&lt;"size of a is " &lt;&lt;a.size() &lt;&lt;endl;<br>
  cout &lt;&lt;"max_size of a is still " &lt;&lt;a.max_size() &lt;&lt;endl;</p>
<p class="style3">}</p>
<p class="style3">//function to print the contents of deque<br>
  void print_contents (CHARDEQUE deque, char *name)<br>
  {<br>
  CHARDEQUE::iterator pdeque;</p>
<p class="style3">cout &lt;&lt;"The contents of "&lt;&lt; name &lt;&lt;" : ";</p>
<p class="style3">for(pdeque = deque.begin();<br>
  pdeque != deque.end();<br>
  pdeque++)<br>
  {<br>
  cout &lt;&lt; *pdeque &lt;&lt;" " ;<br>
  }<br>
  cout&lt;&lt;endl;<br>
  }</p>
<p class="style3">程序运行输出:<br>
  The contents of a : A B C D<br>
  max_size of a is 4294967295<br>
  size of a is 4<br>
  The contents of a : A B C D X X X X X X<br>
  size of a is 10<br>
  The contents of a : A B C D X<br>
  size of a is 5<br>
  max_size of a is still 4294967295</p>
<p class="style3">&nbsp;</p>
<p class="style3"><strong>9-16 深度为n的二叉树的最大节点数是多少?有以下节点数的二叉树的最小深度为多少?1) 5; 2) 9; 3) 25; 4) 250。</strong><br>
</p>
<p class="style3">解: <br>
  深度为n的二叉树的最大节点数为2n+1-1;<br>
  以上二叉树的最小深度为:1)2; 2)3; 3) 4; 4) 7<br>
</p>
<p class="style3"><strong>9-17 请建立如图所示的一个简单的二叉树,结点数据类型为字符型。</strong><br>
    <br>
  解: <br>
  //nodetree.h 即为教材中例程9-11,参见教材第9章<br>
  #ifndef TREENODE_CLASS <br>
  #define TREENODE_CLASS</p>
<p class="style3">#ifndef NULL<br>
  const int NULL = 0;<br>
  #endif // NULL</p>
<p class="style3">template &lt;class T&gt;<br>
  class TreeNode<br>
  {<br>
  private:<br>
  TreeNode&lt;T&gt; *left; //左指针<br>
  TreeNode&lt;T&gt; *right; //右指针</p>
<p class="style3">public:<br>
  T data; //结点数据<br>
  <br>
  // 构造函数<br>
  TreeNode (const T&amp; item, TreeNode&lt;T&gt; *lptr = NULL,<br>
  TreeNode&lt;T&gt; *rptr = NULL);<br>
  <br>
  // 访问指针域的函数<br>
  TreeNode&lt;T&gt;* Left(void) const; //取得左指针<br>
  TreeNode&lt;T&gt;* Right(void) const; //取得右指针<br>
  <br>
  // 删除当前结点的左右子树<br>
  void release();<br>
  };</p>
<p class="style3">// 构造函数,初始化数据域和指针域<br>
  template &lt;class T&gt;<br>
  TreeNode&lt;T&gt;::TreeNode (const T&amp; item, TreeNode&lt;T&gt; *lptr,<br>
  TreeNode&lt;T&gt; *rptr): data(item), left(lptr), right(rptr)<br>
  {}</p>
<p class="style3">//取得左指针<br>
  template &lt;class T&gt;<br>
  TreeNode&lt;T&gt;* TreeNode&lt;T&gt;::Left(void) const<br>
  {<br>
  return left;<br>
  }</p>
<p class="style3">//取得右指针<br>
  template &lt;class T&gt;<br>
  TreeNode&lt;T&gt;* TreeNode&lt;T&gt;::Right(void) const<br>
  {<br>
  return right;<br>
  }</p>
<p class="style3">// 删除当前结点的左右子树<br>
  template &lt;class T&gt;<br>
  void TreeNode&lt;T&gt;::release()<br>
  {<br>
  if(left)<br>
  { //删除左子树<br>
  left-&gt;release();<br>
  delete left;<br>
  left=NULL;<br>
  }<br>
  if(right)<br>
  { //删除右子树<br>
  right-&gt;release();<br>
  delete right;<br>
  right=NULL;<br>
  }<br>
  }</p>
<p class="style3">#endif // TREENODE_CLASS</p>
<p class="style3">//test9_17.cpp<br>
  #include &lt;iostream.h&gt;<br>
  #include "treenode.h"</p>
<p class="style3">void main(void)<br>
  {<br>
  TreeNode&lt;char&gt; D('D'),E('E');<br>
  TreeNode&lt;char&gt; B('B',&amp;D,&amp;E),C('C');<br>
  TreeNode&lt;char&gt; A('A',&amp;B,&amp;C);<br>
  }</p>
<p class="style3">&nbsp;</p>
</body>
</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -