본문 바로가기

IT

이게 뭐지

// Doubly linked list in C 


#include<stdio.h>

#include<stdlib.h>



typedef struct node 

{

struct node* prev; // prev(ious)

int num;

char name[20];

struct node* next; // next

}  nodePointer;


int count=0;

void dinsert(nodePointer* node, nodePointer *newnode); //삽입

void ddelete(nodePointer *node, nodePointer *deleted,nodePointer *avail); //삭제

//탐색

//전체 읽기

//작업 종료



int main(void)

{

char choice;

nodePointer *header,*avail,*newnod,*current,*cur2;

int num;




header = (nodePointer*) malloc(sizeof(nodePointer));

avail = (nodePointer*) malloc(sizeof(nodePointer));

current = header;


avail -> prev = NULL;

avail -> next = NULL;

header->next = NULL;



for(;;)

{

printf("i(삽입), d(삭제), f(탐색), r(전체 읽기), q(작업종료)를 선택하시오:");

scanf("%c",&choice);


if(choice == 'i')

{

for(;;)

{

if(avail->next==NULL)

newnod = (nodePointer*) malloc(sizeof(nodePointer));

else {

for(current = avail; count ; current = current->next)

if(current->next == NULL)

break;

for(cur2 = avail; count ; cur2 = cur2->next)

if(cur2->next == current)

break;

newnod = current;

cur2->next=0;

count--;

}


printf("삽입할 자료(학번,이름)을 입력하시오:");

scanf("%d",&newnod->num);

if(feof(stdin)) break;

scanf("%s",&newnod->name);


if(header->next == NULL)

{

newnod->prev = header;

newnod->next = header;

header->prev = newnod;

header->next = newnod;

}


else {

for(current=header->next ; current->num < newnod->num; current = current->next )

{

if(current==header)

break;

}

dinsert(current->prev,newnod);

}



}

}


if(choice == 'f')

{

printf("탐색할 자료의 학번을 입력하시오:");

scanf("%d",&num);


printf("<학번,이름> = ");


for(current=header->next ; current->num <= num; current = current->next )

{

if(current->num == num)

printf("<%d,%s>",current->num,current->name);


if(current==header)

break;

}

printf("\n");

}


if(choice == 'r')

{

printf("<학번,이름> = ");


for(current=header->next ; ; current = current->next )

{

if(current==header)

break;


printf("<%d,%s>",current->num,current->name);

}


printf("\n");


}



if(choice == 'd')

{

printf("삭제할 자료의 학번을 입력하시오:");

scanf("%d",&num);


for(current=header->next ; ; current = current->next )

{

if(current->num==num)

{

ddelete(header,current,avail);

printf("<학번, 이름> = <%d, %s>이 삭제되었습니다.\n",num,current->name);

break;

}

if(current==header)

{

printf("<학번, 이름> = <%d, null>는 없는 자료입니다.\n",num);

break;

}

}



}


if(choice=='q')  //작업 종료

return 0;

}




return 0;

}


void dinsert(nodePointer *node, nodePointer *newnode)

{/* insert newnode to the right of node */


newnode->prev = node;

newnode->next = node->next;

node->next->prev = newnode;

node->next = newnode;


}



void ddelete(nodePointer *node, nodePointer* deleted,nodePointer *avail)

nodePointer *cur;

cur = avail;


if (node == deleted)

printf("Deletion of header node not permitted.\n");

else {

deleted->prev->next = deleted->next;

deleted->next->prev = deleted->prev;


deleted->next = NULL;


for(cur = avail; cur->next!=NULL ;cur = cur->next);

cur->next = deleted;

cur->next->next=NULL;

count++;

}


}

'IT' 카테고리의 다른 글

몰라  (0) 2014.05.14
이건 뭘까  (0) 2014.05.14
뭔진 잘 모르겠다.  (0) 2014.05.14
힙소트 // 자세한 설명은 생략한다  (0) 2014.05.14
머지 소트  (0) 2014.05.14