배열을 이용한 리스트의 겨우, 삽입과 삭제 시에 뒷 요소들의 이동이 필수적임.
배열과 배열의 길이를 하나의 구조체 안에 정해 놓으면, 여러 함수를 정의할 때 유용함. 예를 들어 init 함수 정의 시에는 포인터로 L 받아와서, 거기서 배열의 길이에 0을 넣어주면 되고, (참고로 배열의 길이는 상수여야 하므로 이미 정해져 있어서 length 만 정의하면 되는 것.)
이렇게 is_empty 나 is_full 에서도 L→ length 를 통해 쉽게 구현할 수 있음.
add 함수를 배열에서 사용하려면, 우선 파라미터로는 세 가지가 필요함. 포인터 이용해서 배열과 길이를 담은 구조체를 가져와야 하고, 삽입하고 싶은 위치를 나타내는 int 변수와 그 자리에 넣고 싶은 item. 그 뒤 조건을 세 가지 확인해야 함. 가장 쉬운 것부터 해 보면, 우선 배열이 요소로 꽉 차 있을 경우, 더이상 더하고 싶어도 공간이 없기 때문에 안됌. 두 번째로 만약 position 의 값이 배열에 빈 공간을 만드는 숫자인 경우. 즉 length 를 넘어가는 경우나 음수가 되면 안됨. 그 다음에 for 문을 뒤에서부터 돌림. 하나 뒤에 그 전 것을 넣는 식으로. 그렇게 position+1 까지 새로운 값을 넣어주면, for 문을 빠져나오고 position 에 원하던 값을 넣어주면 됨. 그리고 마지막으로 length 를 1 증가시켜주어야 함. 참고로, 뒤에서부터 안하고 앞에서부터 땡기는 경우, override 되므로 기대하는 결과가 나오지 않음.
delete 의 경우 두 가지만 생각해 주면됨. 하나는 isempty 가 false 인가 그리고 다른 하나는 지우려고 하는 position 의 값이 0이상 length-1 이하인가. 그리고 이 코드는 내가 빼고 싶은 position 의 값을 item 에 저장해두고, 포지션값부터 시작해서 length-2 까지 그 다음 값을 대입해 준 뒤에 마지막에 length 에 1을 빼고 item 을 리턴하는 형태.
노드 외에도 헤드 포인터라는 것이 있는데, 이는 첫 번째 노드의 주소값을 저장하는 포인터임. 나중에 이 헤드 포인터를 잘 기억해야 함. 왜냐면 더블 포인터로 헤더 포인터를 구현해야 하기 때문에.