注册 登录
编程论坛 C语言论坛

这个双向循环问题怎么做?

第五先生 发布于 2020-09-27 10:26, 1076 次点击
【问题描述】统计带头结点的双向循环链表中元素个数。
【输入形式】输入一组整型数据,以空格隔开,遇字母结束输入。
【输出形式】统计链表中元素个数。
【样例输入】1 2 3 4 5 a
【样例输出】5
【样例说明】
【评分标准】要求链表是双向循环。使用C语言。
1 回复
#2
星泪成寒2020-09-27 14:36
程序代码:

//double link node
typedef struct _dlink {
    int value;
    struct _dlink* prev;
    struct _dlink* next;
} dlink_t;

//double link manager
typedef struct _dlmgr {
    dlink_t* link;
    int count;
} dlmgr_t;

int insert_node(dlmgr_t* mgr, int value)
{
    dlink_t* head = mgr->link;

    dlink_t* node = calloc(1, sizeof(dlink_t));
    if (NULL == node) {
        return -1;
    }

    if (head) {
        dlink_t* last = head->prev;
        if (head != last) {
            last->next = node;
            node->next = head;
        } else {//only one node in link
            head->next = node;
            head->prev = node;
            node->prev = head;
            node->next = head;
        }
    } else {
        mgr->link = node;
        node->next = node;
        node->prev = node;
    }
   
    mgr->count++;
    return 0;
}

int delete_node(dlmgr_t* mgr, int value)
{
    dlink_t* head = mgr->link;
    dlink_t* work = head;
    do {
        if (work->value == value) {
            dlink_t* last = work->prev;
            last->next = work->next;
            work->next->prev = last;
            free(work);
             mgr->count--;
            return 0;
        }
    } while (work != head);

    return -1;
}
1