/*
//ver.1
Node a,b,c;
a.data=10;
b.data=20;
c.data=30;
a.link=&b;
b.link=&c;
c.link=NULL;
printf("a.link->data : %d\n",a.link->data);
//new List 생성
//ver.2
Node* pa= (Node*)malloc(sizeof(Node)); //동적할당
Node* pb= (Node*)malloc(sizeof(Node));
Node* pc= (Node*)malloc(sizeof(Node));
pa->data=10;
pa->link=pb;
pb->data=20;
pb->link=pc;
pc->data=30;
pc->link=NULL;
viewList(pa);
/////////pa 다음에 삽입
//Node* pd= (Node*)malloc(sizeof(Node));
//pd->data=15; pd->link=pa->link; pa->link=pd;
insertNode(pa,15);
viewList(pa);
/////////////pa 다음 노드 삭제
delNode(pa);
viewList(pa);
*/
//////////struct
//단순연결리스트
/*
#include <stdio.h>
#include <memory.h>
typedef struct node
{
int data; //데이터를 저장하는공간
struct node* link; //다음 노드의 주소를저장하는공간
}Node;
void viewList(Node* head)
{
printf("List [ ");
while(head!=NULL)
{
printf(">%d ",head->data);
head=head->link;
}
printf("]\n");
}
Node* makeNode(int data) //새로운 노드 생성
{
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data=data;
newNode->link=NULL;
return newNode;
}
void insertNode(Node* prev,int data) //prev 다음에 노드삽입
{
Node* newNode = makeNode(data); //data를 가진 새로운 노드생성
if(prev==NULL) // 빈 리스트일때
{
prev=newNode;
return ;
}
newNode->link=prev->link;
prev->link=newNode;
}
void delNode(Node* prev) //prev다음 노드 삭제
{
Node* temp = prev->link->link;
free(prev->link);
prev->link = temp;
}
void delLastNode(Node* head) //마지막 노드 삭제
{
while(head ->link->link != NULL)
{
head = head->link;
}
delNode(head);
}
void addLastNode(Node* head, int data)
{
while(head->link != NULL)
{
head = head->link;
}
insertNode(head, data);
}
int main()
{
//ver.3
Node* head = makeNode(5);
insertNode(head,10);
insertNode(head,20);
insertNode(head,30);
viewList(head);
insertNode(head,15);
viewList(head);
delNode(head);
viewList(head);
delLastNode(head);
viewList(head);
addLastNode(head, 127);
viewList(head);
addLastNode(head, 12);
viewList(head);
delLastNode(head);
viewList(head);
}
*/
//이중연결리스트
#include <stdio.h>
#include <memory.h>
typedef struct dnode
{
int data; //데이터를 저장하는공간
struct dnode* rlink; //다음 노드의 주소를저장하는공간
struct dnode* llink;
}DNode;
void viewList(DNode* head)
{
printf("List [ ");
while(head!=NULL)
{
printf("%d ", head->data);
head=head->rlink;
}
printf("]\n");
}
DNode* makeNode(int data) // 새로운 노드 생성
{
DNode* newNode = (DNode*)malloc(sizeof(DNode));
newNode->data=data;
newNode->rlink=NULL;
return newNode;
}
void insertNode(DNode* prev, int data) //prev 다음에 노드삽입
{
DNode* newNode = makeNode(data);
newNode->rlink = prev->rlink;
if(prev->rlink!=NULL) prev->rlink->llink = newNode;
newNode->llink = prev;
prev->rlink = newNode;
}
//void delNode(Node* prev) //prev다음 노드 삭제
//void delLastNode(Node* head) //마지막 노드 삭제
//void addLastNode(Node* head, int data)
int main()
{
DNode* head = makeNode(5);
insertNode(head, 10);
insertNode(head, 20);
insertNode(head, 30);
viewList(head);
}