鱼C论坛

 找回密码
 立即注册
查看: 3602|回复: 11

大神级别的--双链表

[复制链接]
发表于 2013-8-12 21:01:47 | 显示全部楼层 |阅读模式
5鱼币
实在那一看懂,求解!!!
忘懂的人回复详解一下,,,急!!急!!急!!



1.  llist.c

#include <stdlib.h>
#include <string.h>

#include "llist.h"

#if 0
struct llist_node_st {
    void *data;
    struct llist_node_st *prev;
    struct llist_node_st *next;
};
typedef struct {
    int size;
    struct llist_node_st head;
} LLIST;
#endif

LLIST *llist_creat(int size)
{
    LLIST *new;

    new = malloc(sizeof(*new));
    if (new == NULL) {
        return NULL;
    }

    new->size = size;
    new->head.next = new->head.prev = &new->head;

    return new;
}

void llist_destroy(LLIST *);

int llist_add(LLIST *ptr, const void *data, int dir)
{
    struct llist_node_st *newnode;

    newnode = malloc(sizeof(*newnode));
    if (newnode == NULL) {
        goto malloc_node_err;
    }
    newnode->data = malloc(ptr->size);
    if (newnode->data == NULL) {
        goto malloc_data_err;
    }

    memcpy(newnode->data, data, ptr->size);

    if (dir == LLIST_ADD_FORWARD) {
        newnode->next = ptr->head.next;
        newnode->prev = &ptr->head;
    } else {
        newnode->next = &ptr->head;
        newnode->prev = ptr->head.prev;
    }

    newnode->next->prev = newnode;
    newnode->prev->next = newnode;

    return 0;


    free(newnode->data);
malloc_data_err:
    free(newnode);
malloc_node_err:
    return -1;
}

//llist_delet(LLIST *, );

//llist_find(LLIST *, );

void llist_travel(LLIST *ptr, llist_op *op)
{
    struct llist_node_st *cur;

    for (cur = ptr->head.next; cur != &ptr->head; cur = cur->next) {
        op(cur->data);
    }
}


2.    llist.h

#ifndef HS_LLIST_H
#define HS_LLIST_H

#define LLIST_ADD_FORWARD   0
#define LLIST_ADD_BACKWARD  1

typedef void llist_op(void *);

struct llist_node_st {
    void *data;
    struct llist_node_st *prev;
    struct llist_node_st *next;
};

typedef struct {
    int size;
    struct llist_node_st head;
} LLIST;

LLIST *llist_creat(int size);

void llist_destroy(LLIST *);

int llist_add(LLIST *, const void *data, int dir);

//llist_delet(LLIST *, );

//llist_find(LLIST *, );

void llist_travel(LLIST *, llist_op *op);

#endif    /* HS_LLIST_H */


3.   main.c

#include <stdio.h>

#include "llist.h"

#define NAMESIZE 32

struct score {
    int id;
    char name[NAMESIZE];
    int ch;
    int math;
    int en;
};

static void print_score(void *data)
{
    struct score *d = data;
    printf("%d %s %d %d %d\n", d->id, d->name, d->ch, d->math, d->en);
}

int main(void)
{
    struct score tmp;
    LLIST *list;
    int i;

    list = llist_creat(sizeof(struct score));
    /* if error */

    for (i = 0; i < 9; i++) {
        tmp.id = i;
        tmp.ch = 100 - i;
        tmp.math = 100 - i * 2;
        tmp.en = 100 - i * 3;
        snprintf(tmp.name, NAMESIZE, "stu%d", i);

        llist_add(list, &tmp, LLIST_ADD_FORWARD);
    }

    llist_travel(list, print_score);

    //llist_destroy(list);

    return 0;
}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-14 00:03:16 | 显示全部楼层
答案是这样的!!!
有没有看懂的人回复一下!!!
小Q截图-20130814000323.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-19 12:00:07 | 显示全部楼层
大哥啊,代码你就用插入代码的方法啊,弄成文本形式的很不爽的。
你的问题是什么?没看懂啊。麻烦明确下啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-8-19 19:20:18 | 显示全部楼层
你知道单链表就 应该看得懂这个代码啊。无非是每个链表节点除了有个指向它后继的指针外,还有个指向它前驱的指针。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-27 23:17:29 | 显示全部楼层

一个有十年嵌入式经验的人在讲链表时的程序,我听得也比较糊涂......   所以我也不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-8-27 23:18:04 | 显示全部楼层
仰望天上的光 发表于 2013-8-19 19:20
你知道单链表就 应该看得懂这个代码啊。无非是每个链表节点除了有个指向它后继的指针外,还有个指向它前驱的 ...

一个有十年嵌入式经验的人在讲链表时的程序,我听得也比较糊涂......   所以我也不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-25 16:06:04 | 显示全部楼层
:cryv不知道啥东西
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-25 17:27:43 | 显示全部楼层
谢谢~~~~~~~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-25 17:28:16 | 显示全部楼层
谢谢啊啊啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-26 18:47:55 | 显示全部楼层
不是很懂,支持一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-28 14:39:09 | 显示全部楼层
你想问啥呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-30 21:09:53 | 显示全部楼层
到底有多大神
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 20:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表