list.c
1.### int값을 넣을 수 있는 list
@main.c
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
int main(void)
{
List list;
initList(&list);
insertFirstNode(&list, 4); // [4]
printList(&list);
insertFirstNode(&list, 3); // [3, 4]
printList(&list);
insertFirstNode(&list, 1); // [1, 3, 4]
printList(&list);
insertNode(&list, 1, 2); // [1, 2, 3, 4]
printList(&list);
deleteNode(&list, 3); // [1, 2, 4]
printList(&list);
cleanupList(&list);
return 0;
}
###
###
@list.h
#ifndef LIST_H
#define LIST_H
typedef struct node{
int data;
struct node* next;
} Node;
typedef struct {
Node* ptr;
} List;
void initList(List* pList);
void cleanupList(List* pList);
void insertFirstNode(List* pList, int data);
void insertNode(List* pList, int prevData, int data);
void deleteNode(List* pList, int data);
void printList(const List* pList);
#endif
###
###
@list.c
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
void initList(List* pList)
{
pList->ptr = (Node*)malloc(sizeof(Node));
pList->ptr->next = NULL;
}
void cleanupList(List* pList)
{
Node* p = pList->ptr;
while(p ) {
Node* tmp = p;
p = p->next;
free(tmp);
}
}
void insertFirstNode(List* pList, int data)
{
Node* p = (Node*)malloc(sizeof(Node));
p->data = data;
p->next = pList->ptr->next;
pList->ptr->next = p;
}
void insertNode(List* pList, int prevData, int data)
{
Node* p = pList->ptr->next;
while (p ) {
if (p->data == prevData)
break;
p = p->next;
}
if(p ) {
Node* tmp = (Node*)malloc(sizeof(Node));
tmp->data = data;
tmp->next = p->next;
p->next = tmp;
}
}
void deleteNode(List* pList, int data)
{
Node* p1 = pList->ptr->next;
Node* p2 = pList->ptr;
while(p1 ) {
if (p1->data == data)
break;
p1 = p1->next;
p2 = p2->next;
}
if(p1 ) {
p2->next = p1->next;
free(p1);
}
}
void printList(const List* pList)
{
Node* p = pList->ptr->next;
printf("[");
while(p )
{
printf("%d%s", p->data, (p->next ) ? ", " : "]\n");
p = p->next;
}
}
###
2.### 어느 값이든 넣을 수 있는 list
@main.c
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
int main(void)
{
List list;
initList(&list);
insertFirstNode(&list, 4); // [4]
printList(&list);
insertFirstNode(&list, 3); // [3, 4]
printList(&list);
insertFirstNode(&list, 1); // [1, 3, 4]
printList(&list);
insertNode(&list, 1, 2); // [1, 2, 3, 4]
printList(&list);
deleteNode(&list, 3); // [1, 2, 4]
printList(&list);
cleanupList(&list);
return 0;
}
###
###
@list.h
#ifndef LIST_H
#define LIST_H
typedef struct node{
int data;
struct node* next;
} Node;
typedef struct {
Node* ptr;
} List;
void initList(List* pList);
void cleanupList(List* pList);
void insertFirstNode(List* pList, int data);
void insertNode(List* pList, int prevData, int data);
void deleteNode(List* pList, int data);
void printList(const List* pList);
#endif
###
###
@list.c
#include <stdio.h>
#include <stdlib.h>
#include "list.h"
void initList(List* pList)
{
pList->ptr = (Node*)malloc(sizeof(Node));
pList->ptr->next = NULL;
}
void cleanupList(List* pList)
{
Node* p = pList->ptr;
while(p ) {
Node* tmp = p;
p = p->next;
free(tmp);
}
}
void insertFirstNode(List* pList, int data)
{
Node* p = (Node*)malloc(sizeof(Node));
p->data = data;
p->next = pList->ptr->next;
pList->ptr->next = p;
}
void insertNode(List* pList, int prevData, int data)
{
Node* p = pList->ptr->next;
while (p ) {
if (p->data == prevData)
break;
p = p->next;
}
if(p ) {
Node* tmp = (Node*)malloc(sizeof(Node));
tmp->data = data;
tmp->next = p->next;
p->next = tmp;
}
}
void deleteNode(List* pList, int data)
{
Node* p1 = pList->ptr->next;
Node* p2 = pList->ptr;
while(p1 ) {
if (p1->data == data)
break;
p1 = p1->next;
p2 = p2->next;
}
if(p1 ) {
p2->next = p1->next;
free(p1);
}
}
void printList(const List* pList)
{
Node* p = pList->ptr->next;
printf("[");
while(p )
{
printf("%d%s", p->data, (p->next ) ? ", " : "]\n");
p = p->next;
}
}
###
2.### 어느 값이든 넣을 수 있는 list
ㅇㅅㅇ
ReplyDeleteㅎㅅㅎ
Delete