특정한 위치의 원소를 삭제하고자 한다면 위의 그림에서 처럼 삭제 후 당길 수 있음
#include <stdio.h>
#define INF 10000
int arr[INF]; // 거의 무한에 가깝다고 가정
int count = 0;
void addBack(int data) {
arr[count] = data;
count++;
}
void addFront(int data) {
for (int i = count; i >= 1; i--) {
arr[i] = arr[i - 1];
}
arr[0] = data;
count++;
}
void show() {
for (int i = 0; i < count; i++) {
printf("%d ", arr[i]);
}
}
int main(void) {
addBack(9);
addFront(5);
addFront(4);
addFront(1);
addBack(7);
addBack(6);
show();
system("pause");
return 0;
}
단방향 연결 리스트의 Node들은 값과 다음 Node의 주소값을 가짐
#include <stdio.h>
#include <stdlib.h>
int arr[INF]; // 거의 무한에 가깝다고 가정
int count = 0;
typedef struct {
int data;
struct Node* next;
} Node;
Node* head;
int main(void) {
head = (Node*)malloc(sizeof(Node));
Node* node1 = (Node*)malloc(sizeof(Node));
node1->data = 1;
Node* node2 = (Node*)malloc(sizeof(Node));
node2->data = 2;
head->next = node1;
node1->next = node2;
node2->next = NULL;
Node* cur = head->next;
// cur에 저장된 위치를 통해 연결된 리스트들의 값들에 접근
while (cur != NULL) {
printf("%d ", cur->data);
cur = cur->next;
}
system("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int data;
struct Node* next;
} Node;
Node* head;
// 삽입
void addFront(Node* root, int data) {
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->next = root->next;
root->next = node;
}
// 삭제
void removeFront(Node* root) {
Node* front = root->next;
root->next = front->next;
free(front);
}
// 메모리 해제
void freeAll(Node* root) {
Node* cur = head->next;
while (cur != NULL) {
Node* next = cur->next;
free(cur);
cur = next;
}
}
// 리스트 값 출력
void showAll(Node* root) {
Node* cur = head->next;
while (cur != NULL) {
printf("%d ", cur->data);
cur = cur->next;
}
}
int main(void) {
head = (Node*)malloc(sizeof(Node));
head->next = NULL;
addFront(head, 2);
addFront(head, 1);
addFront(head, 7);
addFront(head, 9);
addFront(head, 8);
removeFront(head);
showAll(head);
freeAll(head);
system("pause");
return 0;
}