スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-- : -- : -- | スポンサー広告 | page top↑

Javaで学ぶデータ構造入門02-FIFOキュー(1/3)-配列による素朴な実装

キューは先入れ先出し(FIFO : First In First Out)に基づくデータ構造です。(cf. スタック)

基本的かつ応用上重要なデータ構造であるため、標準ライブラリなどの形でサポートされているプログラミング言語もあります。JavaのAPIにもjava.util.Queueというインタフェースがあります。これはあくまでインタフェースなので、それを継承したjava.util.LinkedListなどのインスタンスを生成して使います。

/* JavaAPIのQueueの使用例 */
Queue<Integer> queue = new LinkedList<Integer>();

キューは一般的に以下の操作を備えています。ここでも、これらの機能を実装しました。

  • Enqueue : キューにデータを入れる。
  • Dequeue : キューからデータを取り出す。
続きを読む
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

23 : 35 : 30 | プログラミング-Java | トラックバック(0) | コメント(0) | page top↑

Javaで学ぶデータ構造入門01-スタック(3/3)-さらなる操作の実装

これまでのエントリでスタックの実装してきました。スタックの基本的な操作であるPushとPopは既に実装済みでありますが、どうやらWikipediaによると、スタックに強く依存している環境では追加の操作を備えている場合があるとのことです。そこで、Wikipediaで例としてあげられている以下の4つの操作を実装してみました。

  • Duplicate
  • Peek
  • Swap
  • Rotate
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 38 : 17 | プログラミング-Java | トラックバック(0) | コメント(1) | page top↑

申し込みは本日(2/27)午後8時締め切り-基本情報技術者、初級シスアド

平成20年度春期の基本情報技術者試験と初級システムアドミニストレータ試験の申し込みは本日(2/27(水))午後8時までとなっています。受験を考えており、まだ申し込みをしていない方はご注意下さい。

※その他の区分は既に締め切られています。

続きを読む

テーマ:情報処理技術者試験 - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

13 : 13 : 14 | 資格-情報処理技術者 | トラックバック(0) | コメント(0) | page top↑

UNIXシステムプログラミング-簡易シェルの実装

UNIXシステムコールを使い、簡単なシェルをC言語で実装してみました。現時点では以下の機能しか備えていませんが、今後機能を追加する予定です。

  1. 入力したコマンドを実行
  2. exitコマンドで終了
続きを読む

テーマ:UNIX/Linux - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 40 : 02 | プログラミング-UNIX | トラックバック(0) | コメント(0) | page top↑

Javaで学ぶデータ構造入門01-スタック(2/3)-ジェネリクスの実装

第1回となる前回エントリ「Javaで学ぶデータ構造入門01-スタック(1/3)-基本操作の実装」ではスタックが備える基本的な操作のみを実装しました。

  • push : スタックにデータを積む。
  • pop : スタックからデータを取り出す。

しかし、前回の実装には

  • 配列サイズが固定である。
  • int型のデータしか格納できない。

という問題がありました。そこで、今回は次のような改良をします。

  • pushのたびに配列の容量をチェックし、いっぱいになっていたら拡大する。
  • ジェネリクスを実装し、さまざまなオブジェクトを格納できるようにする。
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

16 : 06 : 41 | プログラミング-Java | トラックバック(1) | コメント(0) | page top↑

Javaで学ぶデータ構造入門01-スタック(1/3)-基本操作の実装

スタックは後入れ先出し(LIFO : Last In First Out)に基づくデータ構造です。(cf. FIFOキュー)

基本的かつ応用上重要なデータ構造であるため、多くのプログラミング言語が標準ライブラリなどの形でサポートしています。JavaのAPIにもjava.util.Stackというクラスがあります。

第1回となるこのエントリではスタックが備える基本的な操作のみを実装しました。

  • push : スタックにデータを積む。
  • pop : スタックからデータを取り出す。
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

19 : 37 : 18 | プログラミング-Java | トラックバック(0) | コメント(0) | page top↑

Webページにソースコードを表示するために~CSS編~

前回のエントリ「Webページにソースコードを表示するために~HTML編~」で、ブログにソースコードを載せようとするといくつか問題が生じ、それを回避するためには<PRE>タグや<CODE>タグを用いるとよいということを紹介しました。

しかし、<PRE>タグには表示される文字のフォントが小さくなってしまうという副作用があるのでした。今回のエントリではそれをCSSによって回避する方法を紹介します。

続きを読む

テーマ:web制作 - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

23 : 19 : 01 | HTML/CSS | トラックバック(0) | コメント(0) | page top↑

Webページにソースコードを表示するために~HTML編~

Webページにプログラムのソースコードを載せる際に生じる問題

Webページにプログラムのソースコードを載せようとした場合、いくつか困ることがあります。

  1. インデントのためのタブやスペースが無効化されてしまう。
  2. 文字が等角フォントでない。
  3. < と > で囲まれた文字列がHTMLタグと見なされ画面に表示されない。

これらの問題を解決する方法を紹介します。

続きを読む

テーマ:web制作 - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 47 : 50 | HTML/CSS | トラックバック(0) | コメント(0) | page top↑

Googleのフレーズ検索

マイナス検索

Googleにはマイナス検索という機能があるのはご存じの方も多いかと思います。これは大変便利なのですが、ときに困ったことが起こります。

例えば、GCCの最適化オプションについて調べたくて「gcc -O2」と検索をすると、2つ目のキーワード「-O2」がマイナス検索と見なされてしまい、期待する結果が表示されません。→検索結果

そんなときに役に立つのがフレーズ検索です。

続きを読む

テーマ:Google関連 - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

23 : 22 : 24 | Webサービス | トラックバック(0) | コメント(0) | page top↑

Wiresharkで見る-ARPのパケット(2/2) ARP応答パケット

前回の記事(Wiresharkで見る-ARPのパケット(1/2) ARP要求パケット)では、WiresharkでARPのパケットをキャプチャして、その中のARP要求パケットについて観察しました。今回の記事ではARP応答パケットについて観察します。

[再掲]ARPの概要

ARPは宛先IPアドレスを元にして、次にパケットを送るべきホストのMACアドレスを調べるためのプロトコルです。

  1. 「IPアドレスxxx.xxx.xxx.xxxのホストが持つMACアドレスは何ですか?」とブロードキャストで聞く(ARP要求パケット)
  2. そのIPアドレスを持つホストは「xx:xx:xx:xx:xx:xxですよ。」と答える(ARP応答パケット)

Wiresharkによるパケット解析

ARP応答パケットをWiresharkで見てみましょう。

ARPパケットのSourceとDestination

ARPパケットのInfo
続きを読む

テーマ:インターネット - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

14 : 32 : 04 | Wireshark-パケット解析 | トラックバック(0) | コメント(0) | page top↑

Wiresharkで見る-ARPのパケット(1/2) ARP要求パケット

WiresharkでARPのパケットをキャプチャして、それをARPのパケットフォーマットと対照しながら観察します。記事が長くなったので2分割し、最初の記事ではARP要求パケットを、次の記事ではARP応答パケットについて観察します。

Wiresharkで見たARPのパケット

ARPのパケットをWiresharkで見ると次のようになっています(横に長かったので分割しました)

ARPパケットのSourceとDestination

ARPパケットのInfo

今回はこの中のARP要求パケット(No.1)について観察します。

続きを読む

テーマ:インターネット - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

15 : 05 : 03 | Wireshark-パケット解析 | トラックバック(0) | コメント(0) | page top↑

Wiresharkで見る-Webページが表示されるまでのパケットの流れ

ブラウザを開いてスタートページのYahoo!Japanが表示されるまでのパケットをWiresharkを用いて解析しました。このパケットの流れについて考察し、いくつかの記事を書いています(「続きを読む」の先に記事へのリンクがあります)

Yahoo!Japanを表示するまでのパケットの流れ
  1. ARPでデフォルトゲートウェイ(*1)のMACアドレスを取得
  2. DNSでドメイン名"www.yahoo.co.jp"を解決(*2)
  3. 3ウェイハンドシェイク(*3)でTCPコネクションを確立
  4. HTTPのGETコマンドでデータを要求
  5. データのダウンロード
続きを読む

テーマ:インターネット - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

15 : 39 : 13 | Wireshark-パケット解析 | トラックバック(0) | コメント(2) | page top↑

配列の添え字チェック(安全なJavaと自己責任のC言語)

次のコードをご覧下さい。for文の継続条件をi<a.lengthとすべきところで、i<=a.lengthとしてしまうという、プログラミングを始めたばかりの頃にありがちな?コードです。(*1)


public class Index {
    public static void main(String args[]) {
	int[] a = new int[10];
	for(int i=0; i<=a.length; i++) a[i] = i;
	for(int i=0; i<=a.length; i++) 
	  System.out.println(a[i]);
    }
}

これをコンパイルして実行すると次のようになります。


$ java Index
Exception in thread "main"
 java.lang.ArrayIndexOutOfBoundsException: 10
        at Index.main(Index.java:4)

Javaは実行時に配列の添え字をチェックしているため、1つでもオーバーすると"java.lang.ArrayIndexOutOfBoundsException"が投げられます。

では、C言語ではどうでしょうか?

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 52 : 36 | プログラミング-C/C++ | トラックバック(0) | コメント(0) | page top↑

「ループはポインタ使った方が速い」とは限らない

C言語で配列の各要素へ順番にアクセスするために、indexを用いてループを回す次のようなコードをしばしば書くと思います。


  int i;
  for(i=0; i < SIZE; i++)
    /* この中でa[i]とアクセスする。*/

しかし、次のようにポインタを用いてループを回すコードを時折目にします。


  int *p;
  for(p=&a[0]; p!=&a[SIZE]; p++) sum = (*p)*(*p);
    /* この中で*pとアクセスする。*/

このコーディングの理由としては「ポインタを使った方が速いから。」「C言語らしくてかっこいいから。」などが主だと思いますが、後者はともかくとして前者の主張は常に正しいとは限りません。

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 36 : 04 | プログラミング-C/C++ | トラックバック(0) | コメント(2) | page top↑

SQLにおける「存在検査(EXISTS)」と「IN述語」の違い

情報処理技術者試験では、初級システムアドミニストレータ試験を含む多くの区分でSQLの問題が出題されます。そのため、いくつもの試験を受けていれば、MySQLやSQL Serverといったソフトを実際に使ったことがなくても徐々にSQLについて詳しくなっていき、ちょっとしたSELECT文程度なら記述したり読むことができるようになります。

しかし、「存在検査(EXISTS)」と「IN述語」はその区別が難しく、基本情報技術者試験の学習をしたときにはどんなに参考書を読んでも違いをはっきりと理解することはできませんでした。そして、半年後にソフトウェア開発技術者試験の学習をしているときに初めてその違いを理解でき、忘れないように取っておいたメモがあったのでそれを記事にしました。

続きを読む

テーマ:情報処理技術者試験 - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

23 : 12 : 54 | 資格-情報処理技術者 | トラックバック(0) | コメント(0) | page top↑

基本情報技術者試験合格体験記

私が基本情報技術者試験に合格したときの体験記です。学習状況や使用した参考書などについて詳しく書きました。基本情報技術者試験の合格を目指す方の参考になればうれしいです。

続きを読む

テーマ:情報処理技術者試験 - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 48 : 17 | 資格-情報処理技術者 | トラックバック(2) | コメント(1) | page top↑

10進数の整数値を16進数の文字列に基数変換するメソッドdtoh_ex

0-15(10進数)を0-F(16進数)に基数変換する関数dtoh」という記事を昨日書きましたが、これは0-15までの10進数を1桁の16進数に基数変換するだけでした。

そこで、今日はそれを利用して任意の10進数(ただし、intの範囲内であり、なおかつ非負数)を引数に取り、16進数の文字列を返すメソッドを再帰を用いて作ってみました。

「関数」ではなく「メソッド」としているのは、今回用いた言語がJavaであるためです。

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 41 : 38 | プログラミング-Java | トラックバック(0) | コメント(0) | page top↑

0-15(10進数)を0-F(16進数)に基数変換する関数dtoh

10進数(decimal number)の0-15を引数に取り、16進数(hexadecimal number)の0-Fを返す関数dtohを考えてみます。言語は何を選んでもよいのですが、わけあってここではC言語で書くことにします。

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 52 : 31 | プログラミング-C/C++ | トラックバック(0) | コメント(2) | page top↑

C言語におけるスタック領域の使われ方

スタック領域 C言語ではどのようにスタック領域が使われているか、変数のアドレスを出力してそれを直感的に理解できるように図示して考察しました。
続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

00 : 40 : 01 | プログラミング-C/C++ | トラックバック(0) | コメント(0) | page top↑

各大学のCS学科で学ぶプログラミング言語

ここ数日、はてなブックマークのあるエントリーがきっかけとなって、「初心者向けの言語」についての記事が多く見られます。そして、それに関連した以下の記事に興味を持ちました。

Computer Scienceをきちんと教えている学校の多くは、最初の一年の前半に scheme を教えて、後半に C と assembly language を教えている。(中略)21世紀の今になってもこれは変わっていない。

<引用元> 404 Blog Not Found:初心者向け言語もいろいろ

そこで、日本のいわゆる難関大学のComputer Scienceを教えている学科では、どのようなカリキュラムでプログラミングを教えているのか、実際に調べてみました。

続きを読む

テーマ:プログラミング - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

01 : 23 : 04 | プログラミング-その他 | トラックバック(0) | コメント(0) | page top↑

経路MTU探索(Path MTU Discovery)のまとめ

続きを読む

テーマ:インターネット - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

15 : 53 : 50 | ネットワーク | トラックバック(0) | コメント(0) | page top↑

経路制御のプロトコル(RIP,RIP2,OSPF,BGP)のまとめ

IGP(Interior Gateway Protocol) EGP(Exterior Gateway Protocol)
続きを読む

テーマ:インターネット - ジャンル:コンピュータ - ソーシャルブックマーク: この記事をクリップ! Yahoo!ブックマークに登録

14 : 36 : 26 | ネットワーク | トラックバック(0) | コメント(0) | page top↑
| ホーム |

プロフィール

TBVector

Author:TBVector

プロフィール

メールフォーム

記事検索

Google

最近の記事

人気の記事

過去の記事

カテゴリー

タグランキング

リンク

最近のコメント

最近のトラックバック

アクセスカウンタ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。