반응형
//양방향에,헤드에 추가
/*
양방향 연결리스트 기능
장점:탐색 양방향 가능
단점:메모리 더많이사용, 구현 복잡
*/
#include<iostream>
using namespace std;
struct Node {
int data;
Node *prev;
Node *next;
};
struct Linkedlist
{
Node *dummy; //헤드에 추가할때 ->순서가 그닥 필요하지 않을때
Node *tail; //꼬리에 추가할때 -> 연결리스트에 순서가 필요한경우
int len = 0;
Linkedlist() //생성자
{
dummy = (Node*)malloc(sizeof(Node));
dummy->data = -1;
dummy->prev = NULL;
dummy->next = NULL;
tail = dummy; //같은 위치에 지정
tail->data = -1;
tail->next = NULL;
}
void HeadInsert(int data)
{//헤드에 추가해보기
Node *newnode = (Node*)malloc(sizeof(Node));
newnode->data = data;
newnode->next = NULL;
if (dummy->next != 0)//연결이 되어있다면 prev와 next 다시연결
{
newnode->next = dummy->next;
newnode->prev = dummy;
dummy->next->prev = newnode;
dummy->next = newnode;
}
else
{
newnode->prev = dummy;
dummy->next = newnode;
}
}
void TailInsert(int data)
{//꼬리에 추가해보기
Node *newnode = (Node*)malloc(sizeof(Node));
newnode->data = data;
newnode->next = NULL;
tail->next = newnode;
newnode->prev = tail;
//꼬리위치 옮기기
tail = tail->next;
}
void Delete(int data)
{//해당 데이터 찾아서 삭제해보기
Node *cur = dummy;
cur = cur->next;
while (cur->next!=0&&cur->data != data)cur = cur->next;
if (cur->next == NULL) //마지막노드를 삭제한다면
{
cur->prev->next = NULL; //삭제노드이전 노드의 next를 null로 바꿔준다.
}
else
{
cur->prev->next = cur->next;
cur->next->prev = cur->prev;
}
}
void print()
{
Node *cur = dummy;
cur = cur->next;//더미다음부터
while(cur)
{
printf("%d ", cur->data);
cur=cur->next;
}
printf("\n");
}
};
int main()
{
Linkedlist linkedlist;
//헤드에 추가
linkedlist.HeadInsert(1);
linkedlist.HeadInsert(2);
linkedlist.HeadInsert(3);
linkedlist.print();//3 2 1
linkedlist.Delete(2);
linkedlist.print();//3 1
linkedlist.Delete(1);
linkedlist.print();//3
linkedlist.Delete(3);
linkedlist.print();//\n만 출력,,연결리스트 비워짐
// 꼬리에 추가
linkedlist.TailInsert(1);
linkedlist.TailInsert(2);
linkedlist.TailInsert(3);
linkedlist.print(); //1 2 3
linkedlist.Delete(3);
linkedlist.print();//1 2
//}
}
반응형
'자료구조' 카테고리의 다른 글
TREE (연결리스트) (0) | 2019.09.26 |
---|---|
트라이(Trie) 자료구조 (0) | 2019.04.29 |
HASH(해쉬) (0) | 2019.04.26 |
연결리스트[큐] (0) | 2019.04.26 |
정렬 총 정리 (0) | 2019.04.24 |