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++ ポインタ入門
|次: