1. 추상 자료형: Abstract Data Type
구체적인 기능의 완성과정을 언급하지 않고, 순수하게 기능이 무엇인지를 나열한 것.
ex) 지갑의 추상 자료형
∙ 카드 넣기 ∙ 카드 빼기 ∙ 동전 넣기 ∙ 동전 빼기 ∙ 지폐 넣기 ∙ 지폐 빼기
▶ 자료형 Wallet의 정의
typedef struct _wallet
{
int coin100Num; // 100원짜리 동전의 수
int bill5000Num; // 5,000원짜리 지폐의 수
} Wallet;
※ 완전한 자료형의 정의로 인식되기 위해서는 해당 자료형과 관련이 있는 연산이 함께 정의되어야 한다
▶ 자료형 Wallet 정의의 일부
int TakeOutMoney(Wallet * pw, int coinNum, int billNum); // 돈 꺼내는 연산
void PutMoney(Wallet * pw, int coinNum, int billNum); // 돈 넣는 연산
▶ Wallet 기반의 main
int main(void)
{
Wallet myWallet; // 지갑 하나 장만 했음!
PutMoney(&myWallet, 5, 10); // 돈을 넣는다.
ret = TakeOutMoney(&myWallet, 2, 5); // 돈을 꺼낸다.
}
▶ 자료구조 학습의 옳은 순서
1. 리스트 자료구조의 ADT를 정의한다.
2. ADT를 근거로 리스트 자료구조를 활용하는 main 함수를 정의한다.
3. ADT를 근거로 리스트를 구현한다.
2. 배열을 이용한 리스트의 구현
▶ 배열 기반 리스트
typedef struct __ArratList
{
Data arr[size];
int numOfData;
int curPosition
} ArrayList;
//초기화
void ListInit(List* pList)
{
pList->numOfData = 0;
pList->curPosition = -1;
}
//삽입
void ListInsert(List* pList, LData data)
{
if (pList->numOfData >= Listsize)
{
cout << "저장공간 없음" << endl;
return;
}
pList->arr[pList->numOfData] = data;
(pList->numOfData++);
}
//첫번쨰 참조
int LFirst(List* pList, LData* pdata)
{
if (pList->numOfData == 0)
return false;
(pList->curPosition) == 0;
*pdata = pList->arr[0];
return true;
}
//다음 참조
int LNext(List* pList, LData* pdata)
{
if (pList->curPosition >= (pList->numOfData)-1)
return false;
(pList->curPosition)++;
*pdata = pList->arr[pList->curPosition];
return true;
}
//삭제
LData LRemove(List* pList)
{
int rpos = pList->curPosition;
int num = pList->numOfData;
int i;
LData rdata = pList->arr[rpos];
for (i = rpos; i < num - 1; i++)
{
pList->arr[i] = pList->arr[i + 1];
}
pList->numOfData--;
pList->curPosition--;
return rdata;
}
▶ 배열 기반 리스트의 장점
∙ 데이터 참조가 쉽다. 인덱스 값 기준으로 어디든 한 번에 참조 가능!
▶ 배열 기반 리스트의 단점
∙ 배열의 길이가 초기에 결정되어야 한다. 변경이 불가능하다.
∙ 삭제의 과정에서 데이터의 이동(복사)가 매우 빈번히 일어난다.
'프로그래밍 > 자료구조' 카테고리의 다른 글
6. 스택(Stack) (0) | 2019.06.07 |
---|---|
5. 원형 연결 리스트 3 (원형 + 양방향) (0) | 2019.06.06 |
4. 연결 리스트 2 (연결리스트 + 더미노드 + 정렬삽입) (0) | 2019.06.05 |
2. 재귀(Recursion) (0) | 2019.06.04 |
1. 자료구조와 알고리즘의 이해 (0) | 2019.06.04 |