Skip to content.

kagome.lab.tkikuchi.net

Sections
Personal tools
Views

演習1

Document Actions
リスト・スタック・待ち行列

新システム(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 には最初からリストがある

スタック

演習問題

  1. Python のリストにある pop() は、データを取り出す位置の指定もできる。リスト queue に、 queue.pop(0) を実行すると、待ち行列からの取り出しができることを確かめなさい。回答は q1-1.py に作成すること。
    • 参考実行例
    • $ python q1-1.py
      enqueue data or [ret] to dequeue: 1
      enqueue data or [ret] to dequeue: 2
      enqueue data or [ret] to dequeue: 3
      enqueue data or [ret] to dequeue: 4
      enqueue data or [ret] to dequeue: 
      1
      enqueue data or [ret] to dequeue: 
      2
      enqueue data or [ret] to dequeue: 
      3
      
  2. C/Python それぞれの「リスト」プログラムで、"abc","ghi","xyz" をリストに格納した後で、リストの2番目に "def" という文字列を挿入するにはどうしたらよいか。 それぞれ、q1-2.c, q1-2.py という名前でプログラムを作成しなさい。
    • ヒント
    • C では void insert(char *x, LIST p, int i) を作る
    • Python では insert() を使う

参考情報

Created by tkikuchi
Last modified 2006-06-09 15:26
 

Powered by Plone

This site conforms to the following standards: