Views
演習1
リスト・スタック・待ち行列
新システム(Mac)でのプログラミング
- ログインすると画面下のドックに "Firefox", "Thunderbird", "ターミナル", "テキストエディット" のアイコンが入っています。
- Firefox はブラウザです。
- 設定はこちら を参考に、自分で
- Thunderbird はメールソフトです。
- 設定はこちら を参考に、自分で
- ターミナルで、unix コマンド実行ができます
- テキストエディットをプログラム作成に使ってください
- Xcode というのもあるので、そちらがよければ自分で使い方を探してやってください
最初のプログラム
- ターミナルを起動
- 本日の作業ディレクトリを作成/移動
$ mkdir da $ cd da $ mkdir ex1 $ cd ex1
- 最初のプログラムを作成
$ touch list.c
- の後、テキストエディットを起動してファイルメニューから開く
- プログラム (list.c)
テキストエディット使用上の注意
- ¥n などの 円記号は、C言語では本来 backslash でないといけない。
- 日本語(JIS) の円記号と ASCII の backslash は 0x5C で同じ
- テキストエディットでは円記号を unicode (00A5) で表す(backslash ではない)
- "Option" キーを押しながら円記号キーを押すと backslash の入力ができる
Cプログラムのコンパイルと実行
$ gcc -o list list.c $ ls list list.c $ ./list abc ghi xyz
プログラム解説
- typedef ...
- リスト構造体の定義。データとして文字列へのポインタ。次のリスト要素へのポインタ。
- LIST create(...
- 最初のリスト要素。
- 次のリスト要素へのポインタが NULL であるのは、リストの最後を表す。
- LIST append(...
- リストへの要素追加。
- 前のリストの「次のリスト要素へのポインタ」に自分へのポインタを入れる
- データを入れ、自分が最後の要素であることを入れておく。
- void show_list(...
- p を次々とたどって文字列を表示する
- main(...
- 3つの文字列を順にリストに格納し、最後に全部表示する。
リストへの文字列格納状況
Python には最初からリストがある
- list.c と同じ機能のプログラム (list.py)
- 同様にテキストエディットで作成し、実行してみる
$ python list.py abc ghi xyz
スタック
- Python のリストには、末尾のデータを取り出してリストから削除する機能 pop() がある
- これを利用したプログラム例 (stack.py)
- 実行例
$ python stack.py push data or [ret] to pop: abc push data or [ret] to pop: def push data or [ret] to pop: ghi push data or [ret] to pop: jkl push data or [ret] to pop: jkl push data or [ret] to pop: ghi push data or [ret] to pop: def push data or [ret] to pop: abc
演習問題
- Python のリストにある pop() は、データを取り出す位置の指定もできる。リスト queue に、 queue.pop(0) を実行すると、待ち行列からの取り出しができることを確かめなさい。回答は q1-1.py に作成すること。
- C/Python それぞれの「リスト」プログラムで、"abc","ghi","xyz" をリストに格納した後で、リストの2番目に "def" という文字列を挿入するにはどうしたらよいか。
それぞれ、q1-2.c, q1-2.py という名前でプログラムを作成しなさい。
- ヒント
- C では void insert(char *x, LIST p, int i) を作る
- Python では insert() を使う