IT

linked list ?

kio467 2014. 6. 9. 11:10

#include <stdio.h>

#include <stdlib.h>


struct node

{

int stu_num;

char stu_name[20];

struct node * link;

};

typedef struct node list_node;

typedef list_node * list_ptr;



list_ptr create();

list_ptr find(list_ptr list,int x);

void insert(list_ptr *ptr,list_ptr node);

void avail(list_ptr *ptr, list_ptr trail, list_ptr node) ;

void print_list(list_ptr ptr);


void main()

{

list_ptr student = create();

list_ptr trash = NULL;



char input = '0';

while(1)

{

printf("원하는 동작 입력.(i삽입 d삭제 r읽기 f탐색 q종료)");

// scanf("%c",input);


// if(input = 'i') 

{insert(&student,student->link);}

// else if(input = 'd')

// {avail(&student, trash, student->link);}

// else if (input = 'r')

// { print_list(student);}

// else if (input = 'f')

{

int n;

char data[40];

printf("찾을 번호 입력.");

scanf("%d", &n); 

trash = find(student, n);

if (trash)

{

printf("%s",trash->stu_name);

printf("%d",trash->stu_num);

}

else

printf("null");


}

// else if (input = 'q')

{

// fprintf(stderr,"종료합니다.");

// exit(1);

}

// else

{

// fprintf(stderr,"err");

// exit(0);

}

}

}


list_ptr create()

{

list_ptr first, second;

first = (list_ptr)malloc(sizeof(list_node));

second = (list_ptr)malloc(sizeof(list_node));

second->link=NULL;

second->stu_num = 0;

second->stu_name == "0";

first->stu_num = 0;

first->stu_name == "0";

first->link=second;

return first;

}


list_ptr find(list_ptr list,int x)

{

list_ptr temp;

temp=list;

while((temp!=NULL)&&(temp->stu_num!=x))

{temp=temp->link;}

if(temp->stu_num==x) {return temp;}

else {return NULL;}

}


void insert(list_ptr *ptr,list_ptr node)

{

list_ptr temp;

int no;

temp=(list_ptr)malloc(sizeof(list_node));

if(!temp)

{

fprintf(stderr,"err");

exit(1);

}

printf("학번 입력.");

scanf("%d",&no);

fflush(stdin);

temp->stu_num = no;

printf("이름 입력.");

scanf("%s",&temp->stu_name);

fflush(stdin);

if(*ptr)

{

temp->link = node->link;

node->link = temp;

}

else

{

temp->link = NULL;

*ptr = temp;

}

}


void avail(list_ptr *ptr, list_ptr trail, list_ptr node) 

{

if(trail) /* 노드가 여러 개 있는 경우 */

trail->link = node->link;

else /* 노드가 한 개 밖에 없는 경우 */

*ptr = (*ptr)->link;

free(node);

}


void print_list(list_ptr ptr)

{

printf("The list contains: ");

for( ; ptr; ptr = ptr->link)

printf("%d %s", ptr->stu_num, ptr->stu_name);

printf("\n");

}