| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 894 人关注过本帖, 2 人收藏
标题:写了个单链表(要的朋友拿去吧)
只看楼主 加入收藏
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
程序代码:
/*********************************

           Base Queue

    2011-06-15 (year-month-day)

       (c) xxc/dxc/cosdos

*********************************/


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

typedef int Data;

typedef struct Node
{
    Data data;   // 自定义数据
    struct Node *next;
} Node;

typedef struct Queue
{
    Node *head;
    Node *tail;
    int count;
    // Node* (*fun_createNode)(Data);
} Queue;


Node* createNode(Data d)
{
    Node *p = (Node*)malloc(sizeof(Node));
    if (NULL == p) {
        fprintf(stderr, "Error: Memory Full!\n");
        exit(1);
    }
    p->next = NULL;
    p->data  = d;
    return p;
}


Queue* initQueue(Queue *l)
{
    if (NULL == l)
        return NULL;

    l->head = l->tail = NULL;
    //l->fun_createNode = createNode;
    return l;
}

#define COUNT_NODE(L) isEmpty(L)
int isEmpty(Queue *l)
{
    return l->count;
}

Node* inQueue(Queue *l, Node *new_node)
{
    if (NULL == l || NULL == new_node)
        return NULL;

    new_node->next = NULL;

    // 判断头是否存在,不存在说明是空队列。
    //
    // 空队列需要特殊对待。
    //
    // '.'  空队列时: tail == NULL 且 head == NULL
    //
    // .'.  tail = head = new_node
    //
    // .'.  一个只有一个节点的队列。
    //
    if (NULL == l->head)    {
        l->head        = new_node;
        l->tail        = new_node;
    } else {
        l->tail->next  = new_node;
        l->tail        = new_node;
    }
    ++(l->count);
    return new_node;
}

/*
Node* inQueue(Queue *l, Data d)
{
    if (NULL == l)
        return NULL;
        
    Node *new_node = createNode(d);

    if (NULL == l->head)    {
        l->head        = new_node;
        l->tail        = new_node;
    } else {
        l->tail->next  = new_node;
        l->tail        = new_node;
    }
    ++(l->count);
    return new_node;
}
*/

Node* outQueue(Queue *l)
{
    Node *p;
    if (NULL == l || NULL == l->head)
        return NULL;
        
    p = l->head;
    l->head = p->next; // l->head = l->head->next;
    
    if (NULL == l->head)
        l->tail = NULL;
    --(l->count);
    return p;
}


/*
Data outQueue(Queue *l)
{
    Node *p;
    Data d;
    if (NULL == l || NULL == l->head)
        return NULL;

    p = l->head;
    l->head = p->next; // l->head = l->head->next;

    if (NULL == l->head)
        l->tail = NULL;
    --(l->count);
    d = p->data;
    free(p);
    return d;
}
*/

void clearQueue(Queue *l)
{
    Node *first;
    while(l->head) {
        first = l->head;
        l->head = first->next; // l->head = l->head->next;
        free(first);
        // free(first->data);  // 如果Node中使用一个数据指针。
    }
    l->count = 0;
    l->tail = l->head;
}


[ 本帖最后由 cosdos 于 2011-6-15 21:40 编辑 ]

—>〉Sun〈<—
2011-06-15 21:29
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
宏确实最适合C语言。

—>〉Sun〈<—
2011-06-15 21:42
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 10楼 bccn_1234
请解释一下别人为什么不能用?

My life is brilliant
2011-06-16 08:49
cosdos
Rank: 9Rank: 9Rank: 9
来 自:ShangHai
等 级:蜘蛛侠
威 望:6
帖 子:2109
专家分:1385
注 册:2007-6-19
收藏
得分:0 
#define DATA_SIZE 8                                 // 1)

typedef char Data[DATA_SIZE];                 // 1)

typedef struct node {
    Data data;
    struct node * next;
} Node, * PNode;


1)
这个data只有8个字节大小。
memcpy(&d_temp->data, data, DATA_SIZE);
你的第一个测试程序,实际拷贝了8个字符给d_temp->data,你的测试程序其实只用一个字符。
为什么不传递一个size参数。


2)
插入函数没有检测 index 是否超出链表。
void insert(PNode head, unsigned index, const void * data);

—>〉Sun〈<—
2011-06-20 01:56
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
收藏
得分:0 
所有的函数都没有错误处理,也就是说调用一个函数却没有返回值标识函数是成功或者失败,那这种代码别人怎么用?

在虚拟的世界中寻找目标。
2011-06-21 06:00
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
回复 15楼 faminxmu
是吗?我还以为你们自己能加上。

My life is brilliant
2011-06-21 07:59
bccn_1234
Rank: 2
等 级:论坛游民
帖 子:22
专家分:13
注 册:2011-6-11
收藏
得分:0 
回复 15楼 faminxmu
他的废代码,远不止这些问题,告诉他干吗,让他妈得意去
2011-06-21 09:49
Alar30
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:10
帖 子:988
专家分:1627
注 册:2009-9-8
收藏
得分:0 
谢谢分享了哈。。。
2011-06-21 10:10
快速回复:写了个单链表(要的朋友拿去吧)
数据加载中...
 
   



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

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