#include <stdio.h>
#include <stdlib.h>
struct _node{
int item;
struct _node* next;
};
typedef struct _node* NODE;
NODE createnode(int item);
void insert(NODE* list,NODE* tail, int item, NODE option(NODE* list, NODE* tail, NODE node) );
NODE insert_first (NODE* list, NODE* tail, NODE node);
NODE insert_last (NODE* list, NODE* tail, NODE node);
NODE insert_asc (NODE* list, NODE* tail, NODE node);
NODE insert_desc (NODE* list, NODE* tail, NODE node);
NODE insert_ith (NODE* list, NODE* tail, NODE node);
void delete_first(NODE* list,NODE* tail);
void delete_last(NODE* list, NODE* tail);
void delete_ith(NODE* list, NODE* tail);
void print_list(NODE list);
int main(void)
{
struct _node* list=NULL;
struct _node* tail=NULL;
int n,i,item;
FILE *fin=fopen("input.txt","r");
fscanf(fin,"%d",&n);
for (i=0;i<n;i++)
{
fscanf (fin,"%d",&item);
insert(&list, &tail, item, insert_desc);
}
print_list(list);
delete_first(&list,&tail);
delete_first(&list,&tail);
delete_first(&list,&tail);
delete_first(&list,&tail);
//delete_first(&list,&tail);
print_list(list);
fclose(fin);
return 0;
}
// 리스트 출력
void print_list(NODE list)
{
NODE temp=list;
while(temp!=NULL){
printf ("%d",temp->item);
temp=temp->next;}
printf ("\n");
}
// 노드만들기
NODE createnode(int item)
{
NODE temp=(NODE)malloc(sizeof(NODE*));
temp->item=item;
temp->next=NULL;
return temp;
}
// 노드추가
void insert(NODE* list,NODE* tail, int item, NODE option(NODE* list, NODE* tail, NODE node) )
{
NODE new_node=NULL;
new_node=createnode(item);
option(list,tail,new_node);
}
// 앞에
NODE insert_first(NODE* list, NODE* tail, NODE node)
{
node->next = *list;
*list=node;
return *list;
}
// 뒤에
NODE insert_last(NODE* list, NODE* tail, NODE node)
{
if ( (*list) == NULL)
{
*list=node;
*tail=node;
return *list;
}
(*tail)->next=node;
(*tail) = node;
return *list;
}
// i번째에
NODE insert_ith(NODE* list, NODE* tail, NODE node)
{
int i;
NODE prev= NULL;
NODE temp = (*list);
scanf ("%d",&i);
if ( (*list) == NULL)
{
*list=node;
*tail=node;
return *list;
}
while(temp != NULL)
{
i--;
if (i<0)
{
node->next = temp;
if (prev)
prev->next=node;
if (temp == *list)
*list=node;
//node->next = temp->next;
//temp->next = node;
break;
}
prev=temp;
temp=temp->next;
}
if (i>=0)
{
(*tail)->next=node;
(*tail) = node;
}
return *list;
}
// 오름차순
NODE insert_asc(NODE* list, NODE* tail, NODE node)
{
NODE temp=*list;
NODE prev=NULL;
if (temp == NULL)
{
*list=node;
*tail=node;
return *list;
}
while(temp !=NULL)
{
if (temp->item > node->item)
break;
prev = temp;
temp = temp->next;
}
if (temp != NULL)
node->next=temp;
if (prev != NULL)
prev->next=node;
//head, tail의 변경
if (temp == (*list))
*list = node;
if (prev == (*tail))
*tail = node;
return *list;
}
// 내림차순
NODE insert_desc(NODE* list, NODE* tail, NODE node)
{
NODE temp=*list;
NODE prev=NULL;
if (temp == NULL)
{
*list=node;
*tail=node;
return *list;
}
while(temp !=NULL)
{
if (temp->item < node->item)
break;
prev = temp;
temp = temp->next;
}
if (temp != NULL)
node->next=temp;
if (prev != NULL)
prev->next=node;
//head, tail의 변경
if (temp == (*list))
*list = node;
if (prev == (*tail))
*tail = node;
return *list;
}
void delete_first(NODE* list,NODE* tail)
{
NODE temp=*list;
*list=(*list)->next;
if (temp == *tail)
tail=NULL;
}
void delete_last(NODE* list, NODE* tail)
{
}
void delete_ith(NODE* list, NODE* tail)
{
NODE cur=*list;
NODE prev=NULL;
int i;
scanf ("%d",&i);
while(cur !=NULL)
{
if (i<=0)
{
if (prev == NULL)
{
(*list) = (*list)->next;
}
else
{
prev->next=cur->next;
}
if (cur == (*tail))
*tail=NULL;
break;
}
i--;
prev=cur;
cur=cur->next;
}
}
'자료구조' 카테고리의 다른 글
simple adjacency list (0) | 2015.05.22 |
---|---|
hash simple linear (0) | 2015.05.22 |
binary search tree ( insert, kth smallest, inorder, delete by key) (0) | 2015.05.15 |
boolean combination (0) | 2015.05.01 |