2007년 2월 14일 수요일

이중 연결 리스트

#include <stdio.h>
#include <stdlib.h>

typedef struct
{
int key;
}list;

typedef struct node{
struct node *llink;
list item;
struct node *rlink;
} node;
typedef struct node *node_pointer;



void dinsert(node_pointer node, node_pointer newnode)
{
/* newnode 를 node 의 오른쪽에 삽입 */
newnode ->llink = node;
newnode ->rlink = node ->rlink;
node ->rlink ->llink = newnode;
node ->rlink = newnode;
}

void ddelete(node_pointer node, node_pointer deleted)
{
/* 이중 연결 리스트에서 삭제 */
if(node == deleted)
{
printf("Deletion of head node not permitted. \n");
}
else
{
deleted ->llink ->rlink = deleted ->rlink;
deleted ->rlink ->llink = deleted ->llink;
free(deleted);
}
}

void Print(node_pointer ptr) // 입력된 item 을 출력하는 함수
{
node_pointer ptr2;
ptr2 = ptr->rlink;
for(ptr2; ptr2 != ptr; ptr2=ptr2->rlink)
printf("%d\t", ptr2->item.key);
printf("\n");
}

void main()
{
node_pointer ptr;
ptr = (node_pointer)malloc(sizeof(node));
ptr ->llink = ptr;
ptr ->rlink = ptr;

node_pointer newnode;
int Number;
for (;Number!=4;) {
printf("\nMENU *************************************\n");
printf(" 1.삽입 이중연결리스트 2.삭제 이중연결리스트 3.출력이중연결리스트 4.끝 \n");
printf("******************************************\n");
scanf("%d", &Number);
switch(Number) {
case 1:
printf("\n 값을 입력해 주세요.\n");
newnode = (node_pointer)malloc(sizeof(node));
scanf("\n%d",&(newnode->item.key));
dinsert(ptr, newnode);
break;
case 2: ddelete(ptr, ptr->rlink);
break;
case 3:
Print(ptr);
break;
case 4: printf("수고하셨습니다.\n");
break;
default:
printf("잘못 입력하셨습니다.\n");
break;
}
}
}
*/

댓글 없음:

댓글 쓰기