이중연결리스트 삽입 삭제 C언어로 구현

이중연결리스트 삽입 삭제 C언어로 구현

작성일 2003.04.16댓글 1건
    게시물 수정 , 삭제는 로그인 필요

이중연결리스트 삽입 삭제를 C언어로 구현하라고 하는데....
글쎄여....
어떻게 표현하는지 잘 몰라서 그러니깐
좀 알려주세여....
부탁드립니다



profile_image 익명 작성일 -

이런걸 말씀하시는지...??^^


/* 이중 연결 리스트의 노드 삽입 함수 */

void insnode(int list[MAX])

{

DLIST *new, *pt;

int flag=0;

if (( new = (DLIST *)calloc(sizeof(DLIST),1)) == NULL)

{

printf("\n* 기억 장소가 모자랍니다 !!! *\n");

return;

}

printf("\n* 삽입할 번호를 입력하시오 : ");

scanf("%3d", &new->number);

new->rlink = new->llink = NULL;

list[index] = new->number;

index++;

if ( head == NULL ) /* 리스트가 비어 있는 경우 최초의 노드를 생성한다 */

{

head = new;

head->llink = head->rlink = NULL;

}

else

{

pt = head;

while ( pt->number number ) /* 새로 입력할 노드의 위치를 */

/* 찾기위한 while 문 */

{

if ( pt->rlink == NULL ) {

flag = 2; break; }

pt = pt->rlink;

flag = 1;

}

if ( flag == 0 ) /*노드의 처음 위치에 삽입 */

{

new->llink = NULL;

new->rlink = head;

head->llink = new;

head = new;

}

else if ( flag == 1 ) /* 노드의 중간 위치에 삽입 */

{

new->rlink = pt;

new->llink = pt->llink;

pt->llink->rlink = new;

pt->llink = new;

}

else /* flag=2일 경우, 노드의 마지막 위치에 삽입 */

{

new->llink = pt;

new->rlink = NULL;

pt->rlink = new;

}

}

}

/* 이중 연결 리스트의 노드 삭제 함수 */

void delnode(int list[MAX])

{

DLIST *pt = NULL;

int i, j, dnum, flag=0 ;

printf("\n* 삭제할 번호를 입력하시오 : ");

scanf("%d", &dnum);

pt = head;

while (1) /* 삭제할 노드의 위치를 찾기위한 while문 */

{

if ( pt->number == dnum ) break;

else if ( pt->rlink == NULL) {

flag = 2; break; }

pt = pt->rlink;

flag = 1;

}

if ( flag == 2 )

{

printf("\n %d 번 노드는 존재하지 않습니다 !!! \n", dnum);

return;

}

else if ( flag == 0 ) /* 삭제할 노드가 head 노드인 경우 */

{

head = pt->rlink;

head->llink = NULL;

free(pt);

}

else if ( flag == 1 )

{

if ( pt->rlink == NULL ) /* 마지막 노드 삭제 */

{

pt->llink->rlink = NULL;

free(pt);

}

else /* 중간에 위치한 노드 삭제 */

{

pt->llink->rlink = pt->rlink;

pt->rlink->llink = pt->llink;

free(pt);

}

}

printf("\n* %d 번 노드가 삭제 되었습니다 *\n", dnum);

getch();

}



/* 이중 연결 리스트의 노드 출력 함수 -번호순 정렬- */



void linklist()

{

DLIST *pt = NULL;

clrscr();

pt = head;

if ( head == NULL ) {

printf("** 자료가 존재하지 않습니다 !!! **");

return;

}

clrscr();

printf(" Double Linked List : ");

do

{

printf(" %3d", pt->number);

pt = pt->rlink;

} while (pt->rlink != NULL);

getch();

clrscr();

}

C언어 이중연결리스트 구현

이중연결리스트를 이용하여 전화번호부를... ㅠㅠㅠ /*연결리스트구현한... \n"); } //삭제함수(완료) void dremove_node(DlistNode *phead...