티스토리 뷰

#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
링크
«   2025/01   »
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
글 보관함