アルゴリズムとデータ構造 第2回 線形リスト(復習その2).

Slides:



Advertisements
Similar presentations
アルゴリズムと データ構造 第 3 回 基本的なデータ構造(2) : 配列 1. 前回の復習 アルゴリズムの計算量 最悪(最大)計算量 計算量の漸近的評価 (オーダ)  多項式時間アルゴリズム( polynomial time algorithm )  指数時間アルゴリズム( exponential.
Advertisements

アルゴリズムとデータ構造 第2回 線形リスト(復習).
プログラミング演習II 2004年11月 30日(第6回) 理学部数学科・木村巌.
5.データ構造入門 5-1.連結リスト(Linked List) 5-2.スタック(Stack) 5-3.キュー(Queue)
ISD実習E 2009年6月29日 LISPシステム入門 (第5回) 関数ポインタ eval システム関数.
情報基礎演習B 後半第5回 担当 岩村 TA 谷本君.
数理情報工学演習第一C プログラミング演習 (第3回 ) 2014/04/21
プログラミング入門2 第10回 動的な領域確保 情報工学科 篠埜 功.
データ構造とアルゴリズム 第10回 mallocとfree
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
プログラミング入門2 第10回 構造体 情報工学科 篠埜 功.
12: コマンドライン引数 C プログラミング入門 総機1 (月1) Linux にログインし、以下の講義ページ を開いておくこと
情報工学概論 (アルゴリズムとデータ構造)
アルゴリズムとデータ構造 第3回基本的なデータ構造(リスト) 2015/10/28 アルゴリズムとデータ構造 2015.
12: コマンドライン引数 C プログラミング入門 基幹7 (水5) Linux にログインし、以下の講義ページ を開いておくこと
第8回 プログラミングⅡ 第8回
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
データ構造とアルゴリズム 第13回 スタックとキュー
Stack & Queue & List 3.
第4回放送授業.
アルゴリズムとデータ構造 第4回 配列によるスタックとキュー.
演習問題の答え #include #include #define NUM 5 typedef struct { // 構造体の定義 float shincho; // 身長 float taiju; // 体重 } shintai; void hyouji(shintai.
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
第3回 配列,構造体,ポインタ ~ データ構造について学ぶための基礎~
構造体 構造体, 構造体とポインタの組み合わせ,.
プログラミング論 関数ポインタ と 応用(qsort)
データ構造とアルゴリズム 第4回 リスト ~ データ構造(1)~.
データ構造とアルゴリズム 第5回 スタック ~ データ構造(2)~.
第11回 宿題 出題日:12月21日 締切日:1月7日(木).
データ構造とアルゴリズム 第6回 キュー ~ データ構造(2)~.
精密工学科プログラミング基礎 第10回資料 (12/18実施)
プログラミング 4 記憶の割り付け.
データ構造と アルゴリズム第4回 知能情報学メジャー 和田俊和.
アルゴリズムとデータ構造 補足資料11-1 「mallocとfree」
2005年度 データ構造とアルゴリズム 第3回 「C言語の復習:再帰的データ構造」
プログラミング 3 構造体(2).
メモリの準備 メモリには、その準備の方法で2種類ある。 静的変数: コンパイル時にすでにメモリのサイズがわかっているもの。 普通の変数宣言
プログラミング入門2 第11回 情報工学科 篠埜 功.
オブジェクト指向 プログラミング 第七回 知能情報学部 新田直也.
プログラミング入門2 第11回 情報工学科 篠埜 功.
第7回 プログラミングⅡ 第7回
第11回 プログラミングⅡ 第11回
オブジェクト指向言語論 第八回 知能情報学部 新田直也.
データ構造と アルゴリズム 第五回 知能情報学部 新田直也.
Cプログラミング演習 第10回 二分探索木.
アルゴリズムとデータ構造1 2005年7月5日
2005年度 データ構造とアルゴリズム 第6回 「ハッシュ法を用いた探索」
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
明星大学 情報学科 2012年度 後期   情報技術Ⅱ   第8回
簡易データベース 情報画像工学実験 I : 実験2 担当:関屋大雄(工学部1号棟515室)
精密工学科プログラミング基礎Ⅱ 第5回資料 今回の授業で習得してほしいこと: 構造体 (教科書 91 ページ)
6.データ構造入門 6-1.連結リスト(Linked List) 6-2.スタック(Stack) 6-3.キュー(Queue)
15.1 文字列処理の基本 15.2 文字列処理用ライブラリ関数
データ構造とアルゴリズム 第11回 リスト構造(1)
プログラミング 3 2 次元配列.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
情報基礎演習B 後半第2回 担当 岩村 TA 谷本君.
アルゴリズムとデータ構造1 2006年6月23日
第11回放送授業.
アルゴリズムとデータ構造 補足資料11-3 「線形リストのオペレータ」
ネットワーク・プログラミング Cプログラミングの基礎.
第5回 プログラミングⅡ 第5回
プログラミング論 構造体
データ構造と アルゴリズム 第四回 知能情報学部 新田直也.
プログラミング演習II 2004年11月 16日(第5回) 理学部数学科・木村巌.
プログラミング演習II 2003年12月10日(第7回) 木村巌.
オブジェクト指向 プログラミング 第六回 知能情報学部 新田直也.
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
C言語講座第5回 2017 構造体.
12: コマンドライン引数 C プログラミング入門 基幹2 (月4) Linux にログインし、以下の講義ページ を開いておくこと
Presentation transcript:

アルゴリズムとデータ構造 第2回 線形リスト(復習その2)

本日の講義内容 ポインタと配列 線形リスト スタック

int a[10]で何が起きるのか? メモリー(4バイト*10=40バイト)が確保される。 その先頭アドレスは a で知ることができる。 例   int a[10]={3,8}; scanf(“%d”,a+2); printf(“%d %d\n”,*a,*(a+1),*(a+2));

構造体の定義 typedef struct _card{ int num; struct _card *next; } card;   nextが宣言できない。  typedefにより、 struct _card は、単に cardという型になる。

card のポインタの定義 typedef card *cptr; これで、 card * と書く代わりにcptrと書いてよいことになる。 かえって、わかりにくいと思えば定義しなくても良い。

mallocによる構造体の生成 #include <stdlib.h> cptr new_card(int x){ cptr p; p=(cptr) malloc(sizeof(card)); p->num=x; return p; } これは、1個のcardを新しく作り、そのアドレスを返す関数である。

構造体のメンバーの値の変更 void set_card(cptr ca, int x){ ca-> num=x; return; }

線形リストの先頭と最後 cptr first=NULL; cptr last=NULL; NULLは、整数0またはvoid *としての0である。 使用できない、あるいは未定義を意味する。これは最初の状態。

リストの最後にcardを挿入 void add_card(int x){ cptr new; new=new_card(x); if(last==NULL){ first=new; first->next=NULL; last=first; } else{ last->next=new; new->next=NULL; last=new;

リストの先頭にcardを挿入 void push_card(int x){ cptr new; new=new_card(x); new->next=first; first=new; if(last==NULL) last=new; return; } これは、リストをスタックとして使う。スタックの先頭にデータを入れることをpushという。

POP int pop_card(void){ cptr p; int x; p=first;    if(p==NULL) return p; /*** 空リスト **/ first=first->next; if(first==NULL) last=NULL; x=p->num; free(p); return x; } これは、リストの先頭を取り除く。これがPOPである。  この関数は、取り除いた先頭のcardの値を返す。先頭にあったcardのメモリーはfreeで解放される。

すべてのcardの表示 void print_card(void){ cptr p; int x=0; /*** 先頭を0 番とする。 **/ p=first;    while(p!=NULL){ printf(“%d: %d\n”,x++,p->num); p=p->next; }  ここで、p=p->nextにより次cardを見ている。

n番目のcardの表示 void print_nth(int x){ cptr p; int y=0; /*** 先頭を0 番とする。 **/ p=first;    while(p!=NULL){ if(y==x)‏ printf(“%d: %d\n”,x,p->num); y++; p=p->next; }