C/C++ ポインタ入門 > 構造体 演習問題
Nobuhide Tsuda
Oct-2013
演習問題
- ★下記の構造体を new し、ptr にそのアドレスを代入するコードを書きなさい。
struct Hoge {
int m_value;
};
- ★ 上記の構造体を new し、ptr にそのアドレスを代入し、m_value メンバの値を 123 に設定するコードを書きなさい。
- ★ void print(const Hoge *ptr) Hoge 構造体へのポインタを引数として受け取り、
ptr が指す構造体の m_value メンバの値を cout で表示する関数を実装しなさい。
- 構造体を new し、m_value に 123 を代入し、print() をコールし、123 が表示されることを確認しなさい。
- 解答例
- ★★ void link(Node *lhs, Node *rhs)
下記の構造体 Node を相互にリンクする(lhs->m_next が rhs を指し、rhs->m_prev がlhs を指すようにすること)関数を実装しなさい。
struct Node {
int m_value;
Node *m_prev;
Node *m_next;
};
※ この様な構造体を利用し、前後のノードをポインタでリンクしたものを「双方向リスト(doubly-linked list)」と呼びます。
- ★ Node 構造体を new し、ptr にそのアドレスを代入するコードを書きなさい。
- ★ Node *newList() Node 構造体を new し、それを自分自身と相互リンクし(m_next, m_prev が自分自身を指す)、
new したノードを返す 関数を実装しなさい。
※ このように環状にリンクしたものを環状リストと呼びます。
- ★ Node *lastNode(Node *root)
root が環状リストの先頭を指すとき、環状リストの最後のノードを返す関数を実装しなさい。
- ★★ void printNodes(Node *root)
root が環状リストの先頭を指すとき、環状リストに含まれる全てのノードの値(m_value)を表示する関数を実装しなさい。
- ★★ Node *nthNode(Node *root, int nth)
root が環状リストの先頭を指すとき、nth 番目のノードを返す関数を実装しなさい。
nth が 0 の場合は root を、1 の場合はその次のノードを返すものとする。
nth がノード数を超えている場合は 0 を返しなさい。
- ★★ void appendNode(Node *root, Node *ptr)
root が環状リストの先頭を指すとき、Node *ptr を環状リストの最後に追加する関数を実装しなさい。
- ★★ void insertNode(Node *cur, Node *ptr)
cur が環状リストの一部を指すとき、Node *ptr を cur 直前に挿入する関数を実装しなさい。
- ★★ void removeNode(Node *ptr)
要素が2つ以上の環状リストがあるとき、ptr が指すそれに含まれるノードを環状リストから外す関数を実装しなさい。
- ★★ void deleteAllNodes(Node *root)
root が環状リストの先頭を指すとき、環状リストに含まれるノードを全て delete する関数を実装しなさい。
前:
|上:C/C++ ポインタ入門
|次: