[t:/]$ 지식_

꾸역꾸역 queue

2019/09/18

https://github.com/dawnsea/codes/blob/master/q.c

재귀로 풀려던 문제가 큐로만 풀린다... 대충 빨리 코딩.. 으휴..

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

struct q_t {

    int data;
    struct q_t *next;
};

struct qm_t {

    struct q_t      *qh;
    struct q_t      *qt;
};

int add_q(int data, struct qm_t *m)
{
    struct q_t *n, *aq;

    n = malloc(sizeof(struct q_t));

    n->next = NULL;
    n->data = data; 

    if (!m->qh) {
        m->qh = n;
        m->qt = n;

    } else {

        m->qt->next = n;
        m->qt = n;

    }
}

int get_q(int *data, struct qm_t *m)
{
    struct q_t *dq;

    if (m->qh) {
        *data = m->qh->data;
        dq = m->qh;
        m->qh = m->qh->next;
        free(dq);

        if (m->qh == NULL) {
            m->qt = NULL;
        }

        return 1;
    }

    return 0;

}

int main(int argc, char *argv[])
{
    int k;
    int ret;

    struct qm_t mq;

    mq.qh = NULL;
    mq.qt = NULL;

    add_q(33, &mq);

    printf("%p, %p\n", mq.qh, mq.qt);
    add_q(44, &mq);
    printf("%p, %p\n", mq.qh, mq.qt);

    add_q(55, &mq);
    printf("%p, %p\n", mq.qh, mq.qt);

    get_q(&ret, &mq);
    get_q(&ret, &mq);

    get_q(&ret, &mq);
    printf("--%p, %p\n", mq.qh, mq.qt);
    printf("%d\n", ret);

    add_q(66, &mq);

    get_q(&ret, &mq);
    printf("--%p, %p\n", mq.qh, mq.qt);

    printf("%d\n", ret);

    int yy = get_q(&ret, &mq);
    printf("--%p, %p, %d\n", mq.qh, mq.qt, yy);

//  printf("ql = %d\n", get_qlen(&mq));

    exit(0);

}




공유하기













[t:/] is not "technology - root". dawnsea, rss