자료구조/C_자료구조
C_자료구조 & 알고리즘. 양방향(이중)연결리스트
Sumni Life
2021. 5. 17. 17:36
헤더 노드 생성
#include <stdio.h>
typedef struct dlistnode{
int data;
struct dlistnode* next;
struct dlistnode* prev;
}DListNode;
typedef struct {
DListNode* head;
}HeadNode;
HeadNode *createHead()
{
HeadNode* h = (HeadNode*)malloc(sizeof(HeadNode));
if (h != NULL) h->head = NULL;
return h;
}
리스트 노드 생성
void insertNode(HeadNode* phead, DListNode *preNode, DListNode* newNode)
{
if (phead->head == NULL) //공백 리스트인 경우, 처음이자 마지막 노드로 삽입
{
phead->head = newNode;
newNode->next = NULL;
}
else //공백 리스트가 아닌경우
{
if (preNode->next == NULL)// 마지막 노드
{
preNode->next = newNode; // 이전 노드에서 newNode랑 연결 (우측)
newNode->prev = preNode;// newNode에서 이전 노드랑 연결 (좌측으로)
newNode->next = NULL; // 마지막 노드
}
else
{
newNode->next = preNode->next; // newNode에서 다음노드랑 연결 (우측)
preNode->next = newNode; // 이전 노드에서 newNode랑 연결 (우측)
newNode->prev = preNode;// newNode에서 이전 노드랑 연결 (좌측으로)
newNode->next->prev = newNode; //다음 노드에서 newNode랑 연결
}
}
}
노드 전체 삭제
void allDelNode(HeadNode* phead)
{
DListNode* curr = phead->head;
while (curr != NULL)
{
curr->next->prev = phead->head;
phead->head = curr->next;
free(curr);
}
free(phead);
curr = NULL;
printf("모두 삭제되었습니다.\n");
}
// 이거 아직 완성 안댐...
검색 함수 생성
DListNode* findNode(HeadNode* phead, int data)
{
DListNode* s = phead->head;
while (s->next != NULL)
{
if (s->data == data)
{
printf("일치하는 노드가 존재합니다.\n");
return s;
}
else
{
s = s->next;
}
}
printf("일치하는 값이 없습니다.\n")
}
출력 노드 생성
void printNode(HeadNode* phead)
{
if (phead->head == NULL) // 노드가 없는경우
{
printf("노드가 없어요~!");
}
DListNode* curr = phead->head;
int i = 1;
while (curr != NULL)
{
printf("%d번째 노드 값 : %d\n", i++, curr->data);
curr = curr->next; // 다음 노드로 진행
}
}
함수 호출
int main()
{
HeadNode* h = createHead();
DListNode* preNode = createNode(3);
insertNode(h, NULL, preNode);
insertNode(h, preNode, createNode(6));
printNode(h);
allDelNode(h);
return 0;
}
// 미완성 ^^