티스토리 뷰
#include <stdio.h>
#include "ArrayList.h"
void ListInit(List *plist)
{
plist->arr[0] = NULL; // 이부분은 필요하지 않았음.
plist->numOfData = 0;
plist->curPosition = -1;
}
// 예의처리를 안 해주었고, numOfData의 위치로 저장해야했었음.
void LInsert(List *plist, LData data)
{
/*
plist->curPosition++;
plist->arr[plist->curPosition] = data;
plist->numOfData++;
*/
if(plist->numOfData >= LIST_LEN)
{
puts("저장이 불가능합니다.");
return;
}
plist->arr[plist->numOfData] = data;
(plist->numOfData)++;
}
// NULL말고 0으로 예외처리를 해주어야했음.
// 왜냐하면, 그 안의 값으로 판단하는 것이 아니라 numOfData를 통해 값의 개수를 통해 판단하기 때문이다.
int LFirst(List *plist, LData *pdata)
{
/*
plist->curPosition = 0;
if(plist->arr[plist->curPosition] == NULL)
return FALSE;
else
{
*pdata = plist->arr[plist->curPosition];
return TRUE;
}
*/
if(plist->numOfData == 0)
return FALSE;
(plist->curPosition) = 0;
*pdata = plist->arr[0];
return TRUE;
}
// LNext의 예외처리를 잘못해주었으며, 나머지부분은 예제와 비슷하게 하였음.
int LNext(List *plist, LData *pdata)
{
/*
plist->curPosition++;
if(plist->arr[plist->curPosition] == NULL)
return FALSE;
else
{
*pdata = plist->arr[plist->curPosition];
return TRUE;
}
*/
if(plist->curPosition >= (plist->numOfData) - 1)
return FALSE;
(plist->curPosition)++;
*pdata = plist->arr[plist->curPosition];
return TRUE;
}
// 먼저, LRemove 구현이 가장 힘들었다. 예제와는 많이 다른 모습.
// 예제는 변수를 이용하였음. curPositon의 값을 --; 처리해주는 이유?
// 삭제한 인덱스에서 그 앞의 존재하는 인덱스를 가리키기 위한것? 이라고 생각한다.
// 나의 경우 curPosition의 값을 numOfData - 1과 같이 두게 때문에 현재 인덱스를 가리키는 curPosition의 의미를 퇴색시키는 모습을 생각할 수 있음.
LData LRemove(List *plist)
{
/*
LData delData;
delData = plist->arr[plist->curPosition];
if(plist->curPosition == plist->numOfData - 1)
{
plist->arr[plist->curPosition] = NULL;
plist->numOfData--;
}
else
{
while(plist->curPosition != plist->numOfData - 1)
{
plist->arr[plist->curPosition] = plist->arr[plist->curPosition+1];
plist->curPosition++;
}
}
return delData;
*/
int rpos = plist->curPosition;
int num = plist->numOfData;
int i;
LData rdata = plist->arr[rpos];
for(i = rpos; i < num - 1; i++)
pilst->arr[i] = plist->arr[i+1];
(plist->numOfData)--;
(plist->curPosition)--;
return rdata;
}
#Count 함수의 경우 따로 구현해주지 않았음.
'책 > 윤성우의 열혈 자료구조(C)' 카테고리의 다른 글
1. 재귀(Recursion) (0) | 2019.11.28 |
---|
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 3차원 배열
- 배열
- 1차원 배열
- 강의
- 2차원 배열
- 프로그래밍
- 회전리스트
- 공부
- 알고리즘
- 파이썬
- C
- inflearn
- 구조체
- codeit
- timecomplexity
- 종류
- 직접 지정
- 공간복잡도
- 공용체
- 시간복잡도
- Algorithm
- 포인터
- 비트필드
- call by reference
- 다차원 배열
- 간접 지정
- 재귀함수
- call by value
- 형승격
- 자료구조
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함