Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- qiskit #
- qiskit #qiskitHackerthon
- qiskit #QuantumComputer #QuantumMachine #양자컴퓨터 #양자 #키스킷
- ibm #qiskit #quantum # quantumcomputer #quantumcomputing #quantummachine #quantumengineering #quantumbit #qbit
Archives
- Today
- Total
인일의 공부 블로그
[C 자료구조] 배열 기반의 리스트 구현 하나로 묶기 본문
배열 기반의 리스트는 생성은 쉬우나 배열의 길이를 처음에 정해야 하기 때문에 크기 변경이 불가능하다는 단점이 있다.
ListMain.c
#include <stdio.h>
#include "ArrayList.h"
int main(void) {
List list;
int data;
ListInit(&list);
LInsert(&list, 11); LInsert(&list, 11);
LInsert(&list, 22); LInsert(&list, 22);
LInsert(&list, 33);
printf("현재 데이터의 수 : %d \n", LCount(&list));
if (LFirst(&list, &data)) {
printf("%d ", data);
while (LNext(&list, &data)) {
printf("%d ", data);
}
}
printf("\n\n");
if (LFirst(&list, &data)) {
if (data == 22) {
LRemove(&list);
}
while (LNext(&list, &data)) {
if (data == 22) {
LRemove(&list);
}
}
}
printf("현재 데이터의 수 : %d \n", LCount(&list));
if (LFirst(&list, &data)) {
printf("%d ", data);
while (LNext(&list, &data)) {
printf("%d ", data);
}
}
printf("\n\n");
system("pause");
return 0;
}
ArrayList.c
#include <stdio.h>
#include "ArrayList.h"
void ListInit(List *plist) {
(plist->numOfData) = 0;
(plist->curPosition) = -1;
}
void LInsert(List *plist, LData data) {
if (plist->numOfData >= LIST_LEN) {
puts("저장이 불가능합니다.");
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;
}
int LCount(List * plist) {
return plist->numOfData;
}
ArrayList.h
#ifndef __ARRAY_LIST_H__
#define __ARRAY_LIST_H__
#define TRUE 1
#define FALSE 0
#define LIST_LEN 100
typedef int LData;
typedef struct __ArrayList {
LData arr[LIST_LEN];
int numOfData;
int curPosition;
} ArrayList;
typedef ArrayList List;
void ListInit(List *plist);
void LInsert(List *plist, LData data);
int LFirst(List *plist, LData *pdata);
int LNext(List *plist, LData *pdata);
LData LRemove(List *plist);
int LCount(List *plist);
#endif
+) 아래에는 위의 예제를 이용할 수 있는 예제로 구성하였다.
1. 문제 : 리스트 라이브러리의 활용
리스트 생성 및 초기화 후 정수 1~9저장. 저장된값 순차적 참조하여 합 출력. 2의 배수와 3의배수 삭제. 리스트에 저장된데이터 출력
이 경우 Main 함수만 건들면 된다. ArrayList.c와 ArrayList.h는 배열리스트의 동작을 구현해둔 것이므로 이용하면 된다.
ListUseMain.c
#include <stdio.h>
#include "ArrayList.h"
int main(void) {
List list;
int data;
int sum = 0;
ListInit(&list);
for (int i = 1; i < 10; i++) {
LInsert(&list, i);
}
if (LFirst(&list, &data)) {
sum = sum + data;
while (LNext(&list, &data)) {
sum = sum + data;
}
}
printf("SUM = %d \n\n", sum);
if (LFirst(&list, &data)) {
if (data % 2 == 0 || data % 3 == 0) {
LRemove(&list);
}
while (LNext(&list, &data)) {
if (data % 2 == 0 || data % 3 == 0) {
LRemove(&list);
}
}
}
printf("현재 리스트에 저장된 데이터를 순서대로 출력합니다 : ");
if (LFirst(&list, &data)) {
printf("%d ", data);
while (LNext(&list, &data)) {
printf("%d ", data);
}
}
printf("\n\n");
system("pause");
return 0;
}
'Language, SDK > C C++' 카테고리의 다른 글
[C언어] 사용자 정의 자료형 (0) | 2021.02.05 |
---|---|
[C언어] 배열과 포인터 (0) | 2021.02.05 |
[C] Pointer 개념정리 (0) | 2021.02.03 |
[C 자료구조] 배열이란 (0) | 2021.01.20 |
[C 자료구조] 연결리스트 구현 (0) | 2021.01.20 |