ViVi Home > 技術文書 > ポインタ入門 > 構造体 演習問題


 

 

C/C++ ポインタ入門 > 構造体 演習問題
Nobuhide Tsuda
Oct-2013

演習問題

  1. 下記の構造体を new し、ptr にそのアドレスを代入するコードを書きなさい。
  2. struct Hoge {
        int    m_value;
    };
    
  3. 上記の構造体を new し、ptr にそのアドレスを代入し、m_value メンバの値を 123 に設定するコードを書きなさい。
  4. void print(const Hoge *ptr) Hoge 構造体へのポインタを引数として受け取り、 ptr が指す構造体の m_value メンバの値を cout で表示する関数を実装しなさい。
  5. ★★ void link(Node *lhs, Node *rhs) 下記の構造体 Node を相互にリンクする(lhs->m_next が rhs を指し、rhs->m_prev がlhs を指すようにすること)関数を実装しなさい。
  6. struct Node {
        int    m_value;
        Node   *m_prev;
        Node   *m_next;
    };
    

    ※ この様な構造体を利用し、前後のノードをポインタでリンクしたものを「双方向リスト(doubly-linked list)」と呼びます。

  7. Node 構造体を new し、ptr にそのアドレスを代入するコードを書きなさい。
  8. Node *newList() Node 構造体を new し、それを自分自身と相互リンクし(m_next, m_prev が自分自身を指す)、 new したノードを返す 関数を実装しなさい。
    ※ このように環状にリンクしたものを環状リストと呼びます。

  9. Node *lastNode(Node *root) root が環状リストの先頭を指すとき、環状リストの最後のノードを返す関数を実装しなさい。
  10. ★★ void printNodes(Node *root) root が環状リストの先頭を指すとき、環状リストに含まれる全てのノードの値(m_value)を表示する関数を実装しなさい。
  11. ★★ Node *nthNode(Node *root, int nth) root が環状リストの先頭を指すとき、nth 番目のノードを返す関数を実装しなさい。 nth が 0 の場合は root を、1 の場合はその次のノードを返すものとする。 nth がノード数を超えている場合は 0 を返しなさい。
  12. ★★ void appendNode(Node *root, Node *ptr) root が環状リストの先頭を指すとき、Node *ptr を環状リストの最後に追加する関数を実装しなさい。
  13. ★★ void insertNode(Node *cur, Node *ptr) cur が環状リストの一部を指すとき、Node *ptr を cur 直前に挿入する関数を実装しなさい。
  14. ★★ void removeNode(Node *ptr) 要素が2つ以上の環状リストがあるとき、ptr が指すそれに含まれるノードを環状リストから外す関数を実装しなさい。
  15. ★★ void deleteAllNodes(Node *root) root が環状リストの先頭を指すとき、環状リストに含まれるノードを全て delete する関数を実装しなさい。

 


前: |上:C/C++ ポインタ入門 |次: