doubly linked list 검색
조회수 802회
doubly linked list 검색 도와주세요
doubly linked list 검색 부분 도와주세요 제가 코딩하면 무한 루프에 빠져서 돌아가질 않아요
/*
may.5
*/
#include <stdio.h>
#include <stdlib.h>
typedef float elem;
typedef struct node {
elem data;
struct node *left_link;
struct node *right_link;
} node;
static elem count = 0;
//헤드 노드 초기화
void init(node *phead) {
phead->left_link = phead;
phead->right_link = phead;
}
//노드 삽입시 노드를 생성하는 함수
node *create(elem data) {
node *new_node;
new_node = (node *)malloc(sizeof(node));
new_node->data = data;
new_node->left_link = NULL;
new_node->right_link = NULL;
return new_node;
}
//해당하는 위치에 있는 노드를 구하는 함수
node *node_pos(node *pnode, int num) {
int i;
if (num == (count + 1)) {
pnode = pnode->left_link;
}
else if (num <= (count + 1) / 2) {
for (i = 0; i < num - 1; i++)
pnode = pnode->right_link;
}
else {
for (i = 0; i < 2 + (count - num); i++)
pnode = pnode->left_link;
}
return pnode;
}
//삽입함수
void insert_node(node *p, node *new_node, int num) {
if (num > count + 1) {
printf("총 노드의 개수보다 높은 수를 입력하셨습니다.\n");
exit(1);
}
if (num == 1) {
new_node->left_link = p;
new_node->right_link = p->right_link;
p->right_link->left_link = new_node;
p->right_link = new_node;
}
else {
node *pnode = node_pos(p, num);
new_node->left_link = pnode;
new_node->right_link = pnode->right_link;
pnode->right_link->left_link = new_node;
pnode->right_link = new_node;
}
count++;
}
//삭제함수
void remove_node(node *p, int num) {
node *remove = node_pos(p, num + 1);
if (p->left_link == p->right_link) {
printf("삭제할 노드가 없습니다.\n");
exit(1);
}
else {
count--;
remove->left_link->right_link = remove->right_link;
remove->right_link->left_link = remove->left_link;
free(remove);
}
}
//출력
void show_list(node *phead) {
node *p;
for (p = phead->right_link; p != phead; p = p->right_link) {
printf("<<| %x | %.3f | %x |>> \n", p->left_link, p->data, p->right_link);
}
printf("\n");
}
//탐색
/*
void expl(node *p, int num) {
}
}
*/
int main() {
short pic = 0, pic2 = 0;
float add_num = 0;
int place = 0;
node head_node;
init(&head_node);
while (1) {
printf("실행할 동작을 선택\n");
printf(
" 1. 노드추가 2. 노드 삭제 3.노드 검색 4. 노드 출력 5. 종료 \n 메뉴를 "
"선택하세요 : ");
scanf_s("%hd", &pic);
if (pic >= 1 && pic != 5) {
switch (pic) {
case 1:
printf("삽입할 수 설정 : ");
scanf_s("%f", &add_num);
printf("삽입할 위치를 선택하시오\n");
printf("1. 맨 앞, 2. 맨뒤, 3.사용자 위치 설정 : ");
scanf_s("%hd", &pic2);
if (pic2 == 1) {
insert_node(&head_node, create(add_num), 1);
}
else if (pic2 == 2) {
insert_node(&head_node, create(add_num), count + 1);
}
else if (pic2 == 3) {
printf("삽입할 위치를 설정 (1~ ) : ");
scanf_s("%d", &place);
insert_node(&head_node, create(add_num), place);
}
printf("삽입되었습니다.\n\n");
place = 0;
break;
case 2:
printf("제거할 위치를 설정 (1~ ) : ");
scanf_s("%d", &place);
remove_node(&head_node, place);
printf("제거되었습니다.\n\n");
break;
case 3:
printf("\n");
printf("검색하실 위치를 정하시오 : ");
scanf_s("%d", &place);
printf("\n");
printf("검색하신 위치에 값은 : ");
//expl(&head_node,place);
break;
case 4:
printf("\n");
show_list(&head_node);
break;
default:
printf("유효하지 않은 값입니다. 다시 입력해주십시오.\n\n");
break;
}
}
else if (pic == 5)
break;
}
exit(1);
}
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력