| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 929 人关注过本帖
标题:这个双向循环问题怎么做?
只看楼主 加入收藏
第五先生
Rank: 1
等 级:新手上路
帖 子:30
专家分:0
注 册:2020-5-7
结帖率:40%
收藏
已结贴  问题点数:10 回复次数:1 
这个双向循环问题怎么做?
【问题描述】统计带头结点的双向循环链表中元素个数。
【输入形式】输入一组整型数据,以空格隔开,遇字母结束输入。
【输出形式】统计链表中元素个数。
【样例输入】1 2 3 4 5 a
【样例输出】5
【样例说明】
【评分标准】要求链表是双向循环。使用C语言。
搜索更多相关主题的帖子: 输入 个数 输出 循环 双向 
2020-09-27 10:26
星泪成寒
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:6
帖 子:77
专家分:549
注 册:2013-5-19
收藏
得分:10 
程序代码:
//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;
}
2020-09-27 14:36
快速回复:这个双向循环问题怎么做?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018328 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved