반응형
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define TRUE 1 //TRUE는 1로 정의
#define FALSE 0 //FALSE는 0으로 정의
#define LIST_LEN 100 //리스트의길이는 100으로 정의
typedef int LData; //int를 LData로 정의
typedef struct __ArrayList //구조체 ArrayList 정의
{
LData arr[LIST_LEN];
int numOfData;
int curPosition;
}ArrayList;
typedef ArrayList List;
void ListInit(List* plist) { //리스트 초기화함수
plist->numOfData = 0;
plist->curPosition = -1;
}
void LInsert(List* plist, LData data) { //리스트의 값을 삽입하는 함수
if (plist->numOfData >= LIST_LEN) {
printf("저장불가능합니다.");
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) { //LFirst 이후의 데이터를 참조하기 위한 함수
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;
LData rdata = plist->arr[rpos];
int i;
for (i = rpos; i < num - 1; i++) {
plist->arr[i] = plist->arr[i + 1];
}
plist->numOfData--;
plist->curPosition--;
return rdata;
}
int LCount(List* plist) { //데이터의 개수를 반환하는 함수
return plist->numOfData;
}
int main()
{
List list; //리스트선언
int sum = 0; //데이터들의 합을 위한 변수
int data; //데이터참조를 위한 변수
ListInit(&list);
for (int i = 1; i < 10; i++) //1부터9를 삽입하기 위한 반복문
{
LInsert(&list, i);
}
if (LFirst(&list, &data)) { //sum에 데이터의 값을 더하기 위한 조건문
sum+=data;
while(LNext(&list,&data))
sum+=data;
}
printf("리스트출력:");
if (LFirst(&list, &data)) { //리스트의 현재 상태를 출력하는 조건문
printf("%d ", data);
while (LNext(&list, &data))
printf("%d ", data);
}
printf("\nsum = %d\n", sum);
if (LFirst(&list, &data)) { //리스트에서 2와 3의 배수를 제거하는 조건문
if (data % 2 == 0 || data % 3 == 0)
LRemove(&list);
while (LNext(&list, &data)) {
if (data % 2 == 0 || data % 3 ==0)
LRemove(&list);
}
}
printf("2와 3의 배수를 제거한 리스트 결과:");
if (LFirst(&list, &data)) { //리스트의 현재 상태를 출력하는 조건문
printf("%d ", data);
while (LNext(&list, &data))
printf("%d ", data);
}
return 0;
}
ArrayList.h 및 ArrayList.c 의 내용들을 모두 추가하였습니다.
반응형
'Programming > Data Structure and Algorithm' 카테고리의 다른 글
윤성우의 열혈자료구조 문제 04 - 1연결리스트 익숙해지기 (0) | 2021.12.25 |
---|---|
자료구조 리스트(List) 기초 개념정리 (0) | 2021.12.25 |
하노이탑 c언어 예제 (자료구조) (0) | 2021.12.23 |
자료구조 기초 개념 (Data Structure) (빅오표기법) (0) | 2021.12.19 |
(자료구조) 이진탐색 예제 (윤성우의 열혈 자료구조) (0) | 2021.08.08 |