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


Comments

Post a Comment