ぼんさい塾

ぼんさいノートと補遺に関する素材や注釈です.ミスが多いので初稿から1週間を経た重要な修正のみ最終更新日を残しています.

データ構造

2013-09-05 10:43:13 | 暮らし
progC.pdf
progC-s.pdf
記事一覧

                            スタック

progC-s.pdf に「D95%データ構造」を追加しました.

参考資料([n]は本文でも引用):
[1] データ構造 - Wikipedia
  http://ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E6%A7%8B%E9%80%A0
[2] アルゴリズム+データ構造=プログラム(ニクラウス・ヴィルト、片山卓也訳)
  http://www.fukkan.com/fk/VoteDetail?no=8797
この本の復刊活動にご賛同の方はリクエスト投票をお願いします
[3] 知識の森:6群3編 アルゴリズムとデータ構造
  http://www.ieice-hbkb.org/portal/doc_579.html
[4] 電気工学入門シリーズ 15,アルゴリズムとデータ構造
  http://www.morikita.co.jp/books/book/1606
※ 授業で使いましたが Pascal は全滅? <改訂 C言語版>があるそうです.
[5] データ構造とアルゴリズム - 桐蔭学園
  http://www.cc.toin.ac.jp/sc/palacios/courses/undergraduate/sophomore/algorithms/algorithms.pdf
※ 全186ページ

補足:(1) [2]はかつてのバイブル.
(2) デバッグ用のリストです.pop( ) しても文字は残っています.
#include < stdio.h> //HTML対策で' '挿入
char y[ ]="[2*(x+3]+1)/(z-5)";
//char y[ ]="[2*(x+3)+1]/(z-5)";
char s[32]; int sp=0;
void push(char c){sp++; s[sp] = c;}
char pop( ){sp--; return s[sp+1];}
//
struct le1{int d, n;} w1[100]={{10, 0},{11, 1},{12, 2}};
typedef struct{int d; struct le2 *n;} le2;
le2 w2[100]={{20, &w2[1]},{21, &w2[2]},{22, NULL}};
void *p; le2 *p2;
int main( ){
  char *p=y; int err=0; int i;
  printf("y = %s\n", y);
  do{
    if(*p == '['){push(']');}
    if(*p == '('){push(')');}
    if(*p == ']' || *p == ')'){
      if(*p != pop ( )){err = 1;}
    }
    printf("p = %p, c = %c, sp = %d, s = %s\n", p, *p, sp, s+1);
    p++;
  }while(*p != '\0' && sp >= 0);
  if(sp != 0){err = 1;}
  printf("%s, %d\n", s+1, err);
//
  for(i = 0; i < 4; i++){
    printf("%d, %d, %d\n", i, w1[i].d, w1[i].n);
  }
  for(i = 0; i < 4; i++){
    printf("%d, %d, %p\n", i, w2[i].d, w2[i].n);
  }
  p = malloc(100*sizeof(le2));
  p2 = p; p2->d = w2[1].d; p2->n = w2[1].n;
  printf("%d, %p", p2->d, p2->n);
//
  return 0;
}