본문 바로가기

Information Technology

데이터구조와 알고리즘3回_리스트

반응형




3回 리스트






#리스트_リスト


‡배열을 사용하기 어려운 경우_配列が使いづらい場合


-실행할때 선언 되지않으면 데이터의 개수를 모르기때문

배열은 크기를 지정해서 선언할 필요가 있기 때문에

이것은 동적배열에서도 대응할 수 있다.


-임의의 위치에 데이터를 삽입하거나 삭제가능

배열의 중간에 데이터의 추가 및 삭제는 힘들다.

동적배열에서는 대응하지 못한다.



 - 実行時にならないとデータの個数が分からない

配列は大きさを指定して宣言する必要があるため

これは動的配列でも対応できる


 - 任意の位置にデータを挿入したり削除する

配列の途中にデータを追加・削除するのは手間

動的配列では対応できない



‡배열의 선두에 데이터를 추가할 경우_配列の先頭へデータを追加


다른데이터의 순서도 그대로 저장되야 하기때문에 

모든 데이터를 하나씩 이동시킬 필요가 있다.


ただし、他のデータの順番は保存したい

すべてのデータをひとつずつ後ろに移動させ る必要がある。



리스트의 구조_リストの構造


분위기는 

프로그램 상에서는

포인터를 사용해서 표현한다.

ポインタを使って実装する.



‡리스트의 노드_リストのノード

데이터와 포인터로 구성됨

구조체를 사용한다.


データとポインタの組 

構造体で実現



‡구조체_構造体


-어떤 값을 함께 저장할 수 있는 데이터형

-개별 값은 구조체의 "멤버"라고 부른다.


- いくつかの値をまとめて格納できるデータ型 

- 個々の値は構造体の「メンバ」と呼ばれる



‡구조체사용의 예


‡구조체에 대한 포인터_構造体へのポインタ


-포인터란 일단 주소를 저장하기 위한 변수

-구조체에 대한 포인터이므로, 그 주소는 구조체를 두는 장소이다.


- ポインタということは、とりあえず、アドレスを 格納するための変数(=箱) 

- 構造体へのポインタなので、そのアドレスは 構造体を置く場所



‡구조체의 포인터멤버에 엑세스_構造体のポインタでメンバにアクセス


구조체 멤버에 엑세스

pd.age++;

구조체의 포인터멤버에 엑세스

(*ppd).age++; 또는 ppd->age++;


構造体のメンバへアクセス 

pd.age++; 

構造体のポインタでメンバへアクセス 

(*ppd).age++; または ppd->age++;




‡구조체의 포인터멤버에 대한 엑세스




‡리스트의 노드를 새로 만들기_リストのノードを新しく作る



그 다음, 리스트에 노드를 연결한다.

새로운 노드를 만들면

앞의 노드가 새로운 노드를 가르키도록 해야한다.

어떻게? 앞의 노드의 주소를 기억,유지해 둔다.



リストのノードをつなぐ

 新しいノードを作ったら・・・ 

手前のノードがそのノードを指すようにする。 

 どうればいい? – 手前のノードのアドレスをおぼえておく



‡목록의 모든 노드를 표현하기_リストのノードをすべて表示する


리스트의 첫번째 노드부터 데이터를 표시.

첫번째 노드는 기억해 두지 않으면 안된다.(특별히 따로 저장)

표시는 첫번째 노드에서 시작.

데이터가 표시되면 다음 노드로 이동


 リストの先頭のノードから順にデータを表示 

 先頭をおぼえておかないといけない – 先頭ノードのアドレスだけ、特別に保存 

表示は先頭ノードから開始 

データを表示したら次のノードへ移動





‡‡‡第3回課題‡‡‡


사용자가 int형의 데이터를 차례로 입력한다.

테이터를 리스트로 저장.(끝에 추가)

0이 입력되면 데이터 입력 종료

테이터 목록의 상위부터 순서대로 표시


두번째노드와 세번째 노드 교체(노드가 몇개 있던지 움직임)

노드가 3개밖에 없는 경우에도 움직이지 않으면 안됨.

다시 테이터 목록을 상위부터 순서대로 표시



list.c



이번 실습은 어렵지 않게 끝냈다><

2번째랑 3번째 바꿀때 데이타 저장순서만 신경쓰면 됬다.

처음으로 일찍 귀가ㅎㅎ









반응형