algorithm/theory

링크드 리스트 등등등.

qkqhxla1 2016. 7. 22. 14:44

단일연결리스트 c 코드.


개념 보고 짜봤는데 오랜만에 자료구조 공부하는거라 이 코딩이 맞는지 모르겠다.

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

struct Node {
    int data;
    struct Node *next;
};

Node* createnode(int data)
{
	Node *n = (Node *)malloc(sizeof(Node));
	n->data = data;
	n->next = NULL;
	printf("data = %d의 새 노드 생성\n",data);
	return n;
}
void deletenode(Node *n)
{
	free(n);
}
void appendnode(Node *head, Node *n)
{
	if(head->next == NULL)
	{
		head->next = n;
		printf("data = %d노드와 data = %d노드 연결\n\n",head->data,n->data);
	}
	else
	{
		Node *tail = head;
		while(tail->next != NULL)
			tail = tail->next;
		tail->next = n;
		printf("data = %d노드와 data = %d노드 연결\n\n",tail->data,n->data);
	}
}
void printnode(Node *head)
{
	Node *nextnode = head;
	while(nextnode->next!=NULL)
	{
		printf("%d->",nextnode->data);
		nextnode = nextnode->next;
	}
	printf("%d\n",nextnode->data);
}
void deletenode(Node *head, Node *remove)
{
	Node *move = head;
	while(move!=remove)
		move = move->next;
	head->next = move->next;
}
void insertnode(int data, Node *head, Node *newnode)
{
	Node *temp = head;
	while(temp->data!=data)
		temp = temp->next;

	newnode->next = temp->next;
	temp->next = newnode;
}

int main()
{
	int i = 0;
	Node *root, *newnode;
	root = createnode(i); //가장 처음노드 만듬
	for(i=1;i<10;i++) //노드 9개만들고 처음꺼랑 연결
	{
		newnode = createnode(i);
		appendnode(root,newnode);
	}
	printnode(root); //해드부터 끝까지 출력
	newnode = createnode(10);
	insertnode(5,root,newnode); //데이터 5노드다음에 위에서 만든 새 노드를 집어넣음
	printnode(root); //해드부터 끝까지 출력(삽입 잘됬나 확인용)

	deletenode(root);
	deletenode(newnode);
    return 0;
}


이중연결리스트. 위에 노드부분만

struct Node {

    int data;

    struct Node *previous;

struct Node *next;

};


처럼 바꿔주고 짜면 될듯. 별 큰 차이는 없어보인다.


원형 연결 리스트.

끝부분을 맨 처음 노드에 연결해 주면 돌게 되므로 원형 연결 리스트가 된다.


이 개념을 왜 어려워했었지....

'algorithm > theory' 카테고리의 다른 글

이진 트리 전위,중위,후위 탐색  (0) 2016.07.26
스택, 큐 구현  (0) 2016.07.25
이중 해싱  (0) 2016.07.14
선형 탐사법.  (0) 2016.07.13
레드-블랙 트리 탐색.  (0) 2016.06.29