| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1265 人关注过本帖
标题:自己写顺序线性链表~~出错咯~~
只看楼主 加入收藏
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
回复 10楼 beyondyf
大哥~~~麻烦你解释一下啊~~~~~麻烦咯~~

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 15:48
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
唉,刚回了个邮件,这就写

重剑无锋,大巧不工
2012-01-25 16:00
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
为了突出算法没有加过多的验证
程序代码:
#include<stdio.h>
#include<malloc.h>
#define CAPACITY_DEFAULT     1024
#define CAPACITY_GROWTH     1024
typedef char DATA;
typedef struct
{
    DATA *data;
    int length;
    int capacity;
}LIST;
LIST * creat_list()
{
    LIST * list;
    list = (LIST *)malloc(sizeof(LIST));
    list->data = (DATA *)malloc(CAPACITY_DEFAULT * sizeof(DATA));
    list->length = 0;
    list->capacity = CAPACITY_DEFAULT;
    return list;
}
void delete_list(LIST * list)
{
    free(list->data);
    free(list);
}
int isValid(DATA value)
{
    return value >= 'a' && value <= 'z' || value >= 'A' && value <= 'Z';
}
void clear_list(LIST * list)
{
    list->length = 0;
}
void insert_data(LIST * list, DATA value, int index)
{
    int i;
    DATA * p;
    if(!isValid(value) || index < 0 || index > list->length) return;
    if(list->length >= list->capacity)
    {
        list->capacity += CAPACITY_GROWTH;
        p = (DATA *)malloc(list->capacity * sizeof(DATA));
        memcpy(p, list->data, sizeof(DATA) * index);
        p[index] = value;
        memcpy(p + index + 1, list->data + index, (list->length - index) * sizeof(DATA));
        free(list->data);
        list->data = p;
        list->length++;
        return;
    }
    for(i = list->length; i > index; i--) list->data[i] = list->data[i - 1];
    list->data[index] = value;
    list->length++;
}
void append_data(LIST * list, DATA value)
{
    insert_data(list, value, list->length);
}
void delete_data(LIST * list, int index)
{
    int i;
    if(index <= 0 || index >= list->length) return;
    for(i = index; i < list->length; i++)
        list->data[i] = list->data[i + 1];
    list->length--;
}
void print_list(LIST * list)
{
    int i;
    for(i = 0; i < list->length; i++)
        printf("%c", list->data[i]);
}
int main()
{
    char str[128];
    int i;
    LIST * list;
    list = creat_list();
    printf("测试输入一串字符:\n");
    scanf("%s", str);
    for(i = 0; str[i] != '\0'; append_data(list, str[i++]));
    print_list(list);
    printf("\n");
    printf("测试插入字符,格式:索引(从0开始) 字符\n");
    scanf("%d %c", &i, str);
    insert_data(list, str[0], i);
    print_list(list);
    printf("\n");
    printf("测试删除字符,格式:索引(从0开始)\n");
    scanf("%d", &i);
    delete_data(list, i);
    print_list(list);
    printf("\n");
    delete_list(list);
    return 0;
}

重剑无锋,大巧不工
2012-01-25 17:16
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
回复 13楼 beyondyf
大哥~~~~能不能告诉我哪里错咯~~~~

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 17:24
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
回复 14楼 fourleaves
数据结构一本书的代码我都有,,,只是我想用自己的想法写写~~~就是不知哪错咯~~~如果不知道自己思路到底哪错咯~~偶永远都不能提高~~~

大虾只要指出哪些语句错在哪~~我自己慢慢写该~~~

大虾~~如果不麻烦的话~~

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 17:28
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
你从根上就不对,不是一两句的错误。
你想用缓存来记录表,以减少在表伸缩时对内存的申请,但你连缓存的大小都没记录,单凭一个NULL标志如何操作?
插入操作当表的尺寸超过缓存时你申请了新的内存,但凭一个一级指针如何传递新内存地址?
还有很多问题,不想解释了。要么好好看我的代码,要么好好看书。总之,小妹,这段知识你掌握的很不好,还需好好学习。

重剑无锋,大巧不工
2012-01-25 17:40
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:0 
嗯?怎么把性别给改了?变小弟弟了?

重剑无锋,大巧不工
2012-01-25 18:06
小赵q1
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:492
专家分:777
注 册:2011-8-26
收藏
得分:0 
回复 17楼 beyondyf
你叫小妹妹有点肉麻了,
2012-01-25 18:59
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
回复 16楼 beyondyf
嗯嗯~~~偶刚上大一~~~可能自学能力有问题~~~

谢谢指点

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 20:59
fourleaves
Rank: 2
等 级:论坛游民
帖 子:194
专家分:99
注 册:2010-5-8
收藏
得分:0 
回复 16楼 beyondyf
我是在末位地址所对应的内存单元存入NULL作为标志,然后用GetNumberOfUnit函数中的while循环计数,自到找到NULL标志,这样不是可以算出大小?然后InsertValue想通咯用二级指针来操作~~~这个的却错咯~~但是那个记录大小的,我直接用GetNumberOfUnit不就可以咯,只是还没初始化~~~,可能会出错???对吗?

再复杂的问题也基于最简单的原理。耐心,耐心!丰富自己!等待时机!
2012-01-25 21:21
快速回复:自己写顺序线性链表~~出错咯~~
数据加载中...
 
   



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

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