티스토리 뷰

DLL 데이터 삽입

#include <stdio.h>
#include <stdlib.h>
struct node {
	int data;
	struct node *next;
	struct node *prev;
};
struct node* head = 0;

void addToDLL(int n)
{
	struct node* cur;
	cur = (struct node*)malloc(sizeof(struct node));
	cur->data = n;
	cur->next = 0;
	cur->prev = 0;

	if (head == 0) {
		head = cur;
		return;
	}
	{ //끝을 찾는다
		struct node* temp = head;
		while (temp->next != 0) {
			temp = temp->next;
		}
		temp->next = cur;
		cur->prev = temp;
	}
}

void insertToDLL(int a, int b)
{
	struct node *cur = head;

	while (1) { //검색
		if (cur == 0) {
			if (head == 0) { //검색을못했을땐 break dll이없을땐 return
				return;
			}
			break;
		}
		if (cur->data == a) {
			break;
		}
		cur = cur->next;
	}
	if (cur == 0) {
		return;
	}
	else {
		struct node* newb;
		newb = (struct node*)malloc(sizeof(struct node));
		newb->data = b;
		newb->next = 0;
		newb->prev = 0;

		if (cur->next == 0) {
			newb->prev = cur;
			cur->next = newb;
			return;
		}
		else {
			newb->next = cur->next;
			cur->next->prev = newb;
			newb->prev = cur;
			cur->next = newb;
			return;
		}
	}
	return;
}


void showDLL()
{
	struct node* cur = head;
	if (head == 0) {
		return;
	}
	while (cur != 0) {
		printf("%d ", cur->data);
		cur = cur->next;
	}
	return;
}
void showDLL2()
{
	struct node *cur = head;
	if (head == 0) {
		return;
	}
	while (cur->next != 0) {
		cur = cur->next;
	}
	while (cur != 0) {
		printf("%d ", cur->data);
		cur = cur->prev;
	}
	return;
}
int main(void)
{
	int num, data1, data2, i;
	
	scanf("%d", &num);
	for (i = 0; i < num; i++) {
		scanf("%d", &data1);
		addToDLL(data1);
	}
	scanf("%d", &data1);
	scanf("%d", &data2);
	insertToDLL(data1, data2);
	showDLL2();

}
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31