/*
#include<stdio.h>
#include<string.h>
char stack[100001];
int top=-1;
void push(char data)
{
stack[++top]=data;
}
char pop()
{
return stack[top--];
}
int main()
{
char data[100001];
int i, c=0, s;
scanf("%s", data);
s=strlen(data);
for(i=0;i<s;i++) {
if(data[i]=='(')
{
push(data[i]);
}
else
{
pop();
if(data[i-1]=='(')
{
c+=top+1;
}
else
{
c++;
}
}
}
printf("%d",c);
return 0;
}
*/
//단순 연결리스트 생성과 삽입 삭제
//#include<stdio.h>
//typedef struct node_
//{
// char data;
// struct node_* link;
//}node;
//
//void printList(node* st)
//{
// node* p=st;
// printf("List >> ");
// while(p!=NULL)
// {
// printf("%c -> ",p->data);
// p=p->link;
// }
// printf("\n");
//}
//
//int main()
//{
// node head,n1,n2,n3,n4;
//
// printf("리스트 생성하기\n");
// head.link=&n1;
// n1.link=&n2;
// n2.link=&n3;
// n3.link=NULL;
// n1.data='A';
// n2.data='B';
// n3.data='C';
//
// printList(head.link);
//
// n4.data='D';
// printf("n4를 n1과 n2 사이에 삽입하기\n");
// n4.link=n1.link;
// n1.link=&n4;
// printList(head.link);
//
// printf("n1과 n2 사이에 n4를 삭제하기\n");
// n1.link=n4.link;
//
// printList(head.link);
//
//}
/*
//이중연결리스트
#include<stdio.h>
typedef struct dnode_
{
struct dnode_* prev;
char data;
struct dnode_* next;
}dnode;
void printList(dnode* st)
{
dnode* p=st;
printf("List >> ");
while(p!=NULL)
{
printf("%c -> ",p->data);
p=p->next;
}
printf("\n");
}
int main()
{
dnode head,n1,n2,n3,n4;
////////////////////////////////
printf("리스트 생성하기\n");
head.next=&n1;
n1.prev=&head;
n1.next=&n2;
n2.prev=&n1;
n2.next=&n3;
n3.prev=&n2;
n3.next=NULL;
n1.data='A';
n2.data='B';
n3.data='C';
printList(head.next);
/////////////////////////////////////
printf("리스트의 맨앞에 n4 삽입하기\n");
n4.data='D';
n4.next=head.next;
head.next=&n4;
n4.next->prev=&n4;
n4.prev=&head;
printList(head.next);
//////////////////////////////////////
printf("리스트의 맨 앞에 있는 노드 삭제하기\n");
head.next=head.next->next;
head.next->prev=&head;
printList(head.next);
//////////////////////////////////////
}