/*
#include <stdio.h>
#include <stdlib.h>
typedef struct _node
{
int data;
struct _node* link;
}Node;
void view(Node* head)
{
Node *p=head->link; // head
printf("head-> ");
if(p==NULL) return ;
while(p!= NULL)
{
printf("%d-> ",p-> data);
p=p->link;
}
printf("\n\n");
}
void insertNode(Node* head,int idata)
{
Node * newNode = (Node*)malloc(sizeof(Node));
newNode->data=idata;
newNode->link = head->link;
head->link=newNode;
}
void deleteNode(Node* head)
{
Node* tmp;
if(head->link==NULL)
{
printf("List is empty\n");
return ;
}
tmp=head->link->link;
free(head->link);
head->link = tmp;
}
Node* search(Node* head,int k)
{
//k를 가진 데이터가 있는가?
Node *p= head->link;
while(p!=NULL)
{
if(p->data==k){
printf("Search" );
return p;
}
p=p->link;
}
printf("None Existing\n");
return NULL;
}
int main()
{
Node* head = (Node*)malloc(sizeof(Node));
head->link=NULL;
printf("after initialize\n"); view(head);
insertNode(head,3);
printf("after insert\n"); view(head);
insertNode(head,4);
printf("after insert\n"); view(head);
insertNode(head,5);
printf("after insert\n"); view(head);
deleteNode(head);
printf("after delete\n"); view(head);
deleteNode(head);
printf("after delete\n"); view(head);
putchar('\n');
search(head,4);
return 0;
}
*/
//Double Linked List
//Insert, Delete, Search, search and del, search and insert
/*
#include <stdio.h>
#include <stdlib.h>
typedef struct _node
{
int data;
struct _node* rlink;
struct _node* llink;
} DNode;
//prev next
void view(DNode* head)
{
DNode *p=head->rlink; // head의 오른쪽
printf("head-> ");
if(p==NULL)
return ;
while(p!= NULL)
{
printf("%d-> ",p-> data);
p=p->rlink;
}
printf("\n\n");
}
void insertDNode(DNode* head,int idata)//
{
DNode * newNode = (DNode*)malloc(sizeof(DNode));
newNode->data=idata;
newNode->rlink = head->rlink;
if(head->rlink!=NULL){
head->rlink->llink = newNode;
} head->rlink=newNode;
newNode->llink = head;
}
void deleteDNode(DNode* head)//
{
DNode* tmp;
if(head->rlink==NULL)
{
printf("List is empty\n");
return ;
}
tmp=head->rlink->rlink;
tmp->llink = head;
free(head->rlink);
head->rlink = tmp;
}
DNode* search(DNode* head,int k)//
{
//k를 가진 데이터가 있는가?
DNode *p= head->rlink;
while(p!=NULL)
{
if(p->data==k){
printf("Search\n" );
return p;
}
p=p->rlink;
}
printf("None Existing\n");
return NULL;
}
void deletionNode(DNode* head,int k)//
{
DNode *tmp;
tmp=search(head,k);
if(tmp!=NULL){//k노드가 있을때
tmp->llink->rlink = tmp->rlink;
if(tmp->rlink != NULL){
tmp->rlink->llink = tmp->llink;
}
free(tmp);
printf("delete successed\n");
view(head);
return ;
}
}
int main()
{
DNode* head = (DNode*)malloc(sizeof(DNode));
head->rlink=NULL;
printf("after initialize\n");
view(head);
insertDNode(head,5);
printf("after insert\n"); view(head);
insertDNode(head,6);
printf("after insert\n"); view(head);
insertDNode(head,7);
printf("after insert\n"); view(head);
deleteDNode(head);
printf("after delete\n"); view(head);
deleteDNode(head);
printf("after delete\n"); view(head);
search(head,6); //k값을 가진 노드를 찾아서 반환
deletionNode(head,5); //k값을 가진 노드를 찾아서 제거
return 0;
}
*/
/*n1.data=1;
n2.data=2;
n3.data=3;
n4.data=4;
head.link=&n1;
n1.link=&n2;
n2.link=&n3;
n3.link=&n4;
n4.link=NULL;
view(&head);
//insert after n2
// newNode.data=5;
// newNode.link=n2.link;
// n2.link=&newNode;
insertNode(5);
view(&head);
//delete
//n2.link= newNode.link;
//view(&head);
// free(newNode1);
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int element; // int를 스택 element의 자료형 정의
typedef struct stackNode{ // 스택 노드구조
int data;
struct stackNode *link;
}stackNode;
stackNode *top; //스택 노드지정 top 선언
void push(element item){
stackNode* temp=(stackNode*)malloc(sizeof(stackNode));
temp->data = item;
temp->link = top;
top=temp;
}
element pop(){ // 스택의 삭제후 반환연산
element item;
stackNode* temp = top;
if(top == NULL){
printf("\n\n Stack is empty ! \n");
return 0;
}
else{
item =temp->data;
top= temp->link;
free(temp);
return item;
}
}
element peek() // 스택의 top 원소 검색
{
element item;
if(top==NULL)
{
printf("\n\n stack is empty ! \n");
return 0;
}
else
{
item = top->data;
return item;
}
}
void del(){ // 스택의 삭제연산
stackNode* temp;
if(top==NULL)
{
printf("\n\n stack is empty ! \n");
return 0;
}
else
{
temp = top;
top=top->link;
free(temp);
}
}
void printStack() // 스택의 출력연산
{
stackNode* p=top;
printf("\n Stack [ ");
while(p){
printf("%d ", p->data);
p=p->link;
}
printf("] ");
}
int main()
{
element item;
top = NULL;
printStack();
push(1);
printStack();
push(2);
printStack();
push(3);
item= peek();
printStack();
printf("peek top => %d", item);
del();
printStack();
item=pop();
printStack();
printf("/t top top => %d", item);
item=pop();
printStack();
printf("/t top top => %d", item);
pop();
getchar();
}