본문 바로가기

IT/Algorithm

Algorithm: 이중 연결 리스트(Doubly linked list)

#include <stdio.h>

#include <malloc.h>

typedef struct _dnode{

int name;

struct _dnode *pre_link;

struct _dnode *nxt_link;

}dnode;


dnode *head;

dnode *tail;


void init();

void ordered_insert(int name);

void nexted_insert(int std_name, int nxt_name); 

void print_dnode();

void del(int name);

void modify(int std_name,int mod_name);


void main(){

init();

ordered_insert(1);

ordered_insert(2);

ordered_insert(3);

ordered_insert(4);

ordered_insert(5);

nexted_insert(4,6);

del(4);

modify(5,7);

print_dnode();

}


void init(){

head = (dnode*)malloc(sizeof(dnode));

tail = (dnode*)malloc(sizeof(dnode));

head->pre_link = 0;

head->nxt_link = tail;

tail->pre_link = head;

tail->nxt_link = 0;

}


void ordered_insert(int name){

dnode *temp;

dnode *ins_temp;


ins_temp = (dnode*)malloc(sizeof(dnode));

temp = head->nxt_link;

while(temp->nxt_link != 0){

temp = temp->nxt_link;

}

temp->pre_link->nxt_link = ins_temp;

ins_temp->nxt_link = temp;

ins_temp->name = name;

ins_temp->pre_link = temp->pre_link;

tail->pre_link = ins_temp;

}


void nexted_insert(int std_name, int nxt_name){

dnode *std_temp;

dnode *nxt_temp;


nxt_temp = (dnode*)malloc(sizeof(dnode));

nxt_temp->name = nxt_name;

std_temp = head->nxt_link;

while(std_temp->name != std_name){

std_temp = std_temp->nxt_link;

}

nxt_temp->nxt_link = std_temp->nxt_link;

std_temp->nxt_link = nxt_temp;

nxt_temp->pre_link = std_temp;

}


void print_dnode(){

dnode* temp;


temp = head->nxt_link;

while(temp->nxt_link != 0){

printf("%d\n",temp->name);

temp = temp->nxt_link;

}

}


void del(int name){

dnode *del_temp;


del_temp = head->nxt_link;

while(del_temp->name != name){

del_temp = del_temp->nxt_link;

}

del_temp->nxt_link->pre_link = del_temp->pre_link;

del_temp->pre_link->nxt_link = del_temp->nxt_link;

free(del_temp);

}

void modify(int std_name,int mod_name){

dnode *std_temp;

dnode *mod_temp;


std_temp = head->nxt_link;

while(std_temp->name != std_name){

std_temp = std_temp->nxt_link;

}

std_temp->name = mod_name;

}