* 리스트 작업
① create > 리스트 만들기
② insert > 위치를 지정하고 데이터 넣기
③ delete > 데이터 지우기
④ retrieve > 데이터 읽어오기
* 리스트 종류
1. 배열 리스트
① 카운트 변수 > 현재 자기가 사용하는 자료 공간(연산의 효율을 올리기 위해서)
② 데이터 배열 > 충분히 쓸 수 있는 배열 선언
③ 카운트 + 데이터 구조체
ex ) typedef struct{
int count;
int Data[Max];
}listType;
void insert(listType *Lptr, int position, int *itemptr);
>배열번호 >Data값
void delete(listType *Lptr, int positon);
void Retrieve(listType *Lptr,int position, int *itemptr);
※ insert 함수의 알고리즘
① 리스트가 꽉 차 있는지 확인(count 값과 Max비교)
② position (사이에 빈 칸이 있는가?)
③ position에 값이 있는가?
④ 데이터를 뒤로 한 칸씩 밀어야 한다.(뒤에서부터 한칸씩 밀어야 데이터 충돌이없다.)
⑤ count값 증가
>>>>> 데이터 삽입시 메모리의 효율이 떨어질 수 있다.
2. 포인터 스트(Linked list)
① 데이터 값이 들어갈 멤버
② 자신과 똑같은 타입을 가르키는 포인터
ex) typedef struct{
int Data;
node *next;
}node;
(1) insert
p는 새로운 공간을 가질 목적으로 생성된 임시노드
p = (node *)malloc(sizeof(node));
p -> Data = 8;
p -> next = temp -> next // II
temp -> next = p; // I
> I부터하면 II연결이 불가능하다
따라서 II부터 연결하고, I를 연결한다
(2) delete
p는 없어질 곳의 메모리를 free시킬 목적
p = temp -> next;
temp -> next = temp -> next -> next;
free(p);
3. 포인터 + 구조체
count변수를 사용하여 리스트의 양을 알아내어
프로그램 관리에 편리함을 준다.
ex) typedef struct{
int data;
node *next;
}node;
typedef node* Nptr;
typedef struct{
int count;
Nptr next;
}listType;
void insert(listType *Lptr, int position, int item);
> ① position 위치 확인(count보다 크면 error, 1보다 작으면 error)
② 공간확보 후 data저장
③ position이 1인가를 확인
④ temp를 원하는 위치로 이동
⑤ count값 증가
*pointer list vs Arraylist
>삽입시 따름 밀림이 없다. >삽입될 위치를 찾아 가는게 편하다.
(삽입이 편하다.) (찾아가기 편하다.)
@ 상황에 따라 능동적으로 사용하기!!@
@ 상황에 따라 능동적으로 사용하기!!@
@ 상황에 따라 능동적으로 사용하기!!@