본문 바로가기

Native/C

Doubl Linked list

#include <stdio.h>
#include <stdlib.h>

typedef struct _node
{
    int key;
    struct _node *left;
    struct _node *right;
} node;

// Init
node *head;

void put(int);
void del(void);void init(void);
void prnq(void);

void main(void)
{
    int mnu,key;
    init();

    key = 3;
    put(key);
    key = 4;
    put(key);
    key = 5;
    put(key);
    key = 6;
    put(key);
    key = 7;
    put(key);
    key = 8;
    put(key);

    while(1)
    {
        printf("Menu select : 1.put, 2.del, 3.print : \n");
        scanf("%d", &mnu);

        switch(mnu)
        {
        case 1:
            printf("Input data : ");
            scanf("%d",&key);
            put(key);
            break;
        case 2:
            del();
            break;
        case 3:
            prnq();
            break;
        default:
            puts("error");
        }
    }
}

void init(void)
{
    head = (node*)malloc(sizeof(node));
    head->right = head->left = head;
}

void put(int key)
{
    node* new_node = (node*)malloc(sizeof(node));

    if(new_node == NULL)
    {
        puts("memory full");
        exit(1);
    }

    new_node->key = key;    
    new_node->left = head;
    new_node->right = head->right;
    new_node->right->left = new_node;
    head->right = new_node;
}

void del(void)
{
    node *del;

    del = head->left;    // 삭제 할것

    if(head == del)
    {
        puts("memory empty");
        exit(1);
    }
    else
    {
        del->left->right = del->right;
        del->right->left = del->left;
        free(del);
    }
}

void prnq(void)
{
    node *prn = head;

    puts("=================== Queue list =======================");
    while((prn = prn->left) != head)
        if(prn->key) printf("%d, ",prn->key);
    printf("\n");
    puts("=================== Queue list =======================");
}

'Native > C' 카테고리의 다른 글

open  (0) 2013.10.02
Tree swap  (0) 2013.10.02
[과제] selective_sort 2  (0) 2013.10.02
a,b 내용을 c에 16비트씩 넣기  (0) 2013.10.02
[실습] double stack  (0) 2013.10.02