Creative Code

main.c(리스트) 본문

C Programming

main.c(리스트)

빛하루 2023. 8. 28. 14:44

※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 list {

	Node *ptr;

}List;



void initList(List *pList);

void cleanupList(List *pList);

void printList(const List *pList);



void insertFirstNode(List *pList, int data); // 첫번째 노드에 데이터 추가

void insertNode(List *pList,int prevData, int data); // prevdata 뒤의 노드에 데이터 추가

void deleteNode(List *pList, int data);  // 데이터 삭제



#endif

※list.c파일

#include "list.h"

#include <stdlib.h>

#include <assert.h>

#include <stdio.h>



void initList(List *pList)

{

	pList -> ptr = malloc(sizeof(Node)); // dummy node

	assert(pList->ptr); // 공간이 할당이 되었으면 계속 진행

	pList -> ptr ->data;

	pList -> ptr -> next = NULL;

}

void cleanupList(List *pList)

{

	Node *ptr = pList ->ptr;

	while (ptr){

		Node *tmp = ptr;

		ptr = ptr->next;

		free(tmp);

	}

}



void printList(const List *pList) 

{

	Node *ptr = pList->ptr->next;

	printf("[");

	while (ptr) {

		printf("%d",ptr->data);

		printf((ptr->next)? ", ":"");

		ptr = ptr->next;

	}

	printf("]\n");

}



void insertFirstNode(List *pList, int data)

{

	Node *p = malloc(sizeof(Node));

	assert(p);

	p->data = data;

	p->next = pList->ptr->next;

	pList->ptr->next = p;

}



void insertNode(List *pList, int prevData, int data)

{

	Node *ptr = pList->ptr->next;

	while (ptr){

		if (ptr->data == prevData) {

			break;

		}

		ptr = ptr->next;

	}

	if (ptr){

		Node *p = malloc(sizeof(Node));

		assert(p);

		p->data = data;

		p->next = ptr->next;

		ptr->next = p;

	}

}



void deleteNode(List *pList, int data)

{

	Node *ptr = pList->ptr->next;

	Node *ptr2 = pList->ptr; // ptr뒤에서 따라가는 node

	while (ptr){

		if (ptr->data == data){

			break;

		}

		ptr = ptr->next;

		ptr2 = ptr2 ->next;

	}

	if (ptr){

		ptr2->next = ptr->next;

		free(ptr);

	}	

}

'C Programming' 카테고리의 다른 글

main.c(generic list)  (0) 2023.08.28
main.c(리스트 createNode)  (0) 2023.08.28
main.c(queue memcpy)  (0) 2023.08.25
main.c(queue malloc)  (0) 2023.08.25
main.c(queue 구조체)  (0) 2023.08.25