| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2217 人关注过本帖
标题:链表的值是另一个链表
取消只看楼主 加入收藏
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
结帖率:95.65%
收藏
已结贴  问题点数:100 回复次数:6 
链表的值是另一个链表
简单来说就是一个索引表,以前做题的时候,完成了的。
这不……前几天完成通用链表,就想着,用这组函数来重新写。
结果卡住了,打印出来的值是是乱码(好吧,也不是太乱):


21:00
问题已经被修正,现在可以正常运行了。
这并不是一个完善的索引表,因为并不检查输入的数据是否是合法的单词。
List.h 的声明和实现文件在下面的连接里可以找到。
https://bbs.bccn.net/viewthread.php?tid=476405&page=1&extra=page%3D1#pid2625770


程序代码:
/*打印效果
if
ok
and
jack
witch
where
balck
andy
way
for
of
zippo
oxford
english
chinese
dictionary
cell
element
new
learner


a:
and
andy

b:
balck

c:
cell
chinese

d:
dictionary

e:
element
english

f:
for

i:
if

j:
jack

l:
learner

n:
new

o:
of
ok
oxford

w:
way
where
witch

z:
zippo
*/


程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "d:\mylib\list.h"
#include "d:\mylib\getstring.h"
#define MAXLINE 101
int
com1( void *, void * );
int
com2( void *, void * );
void
Print1( void * );
void
Print2( void * );


int
main( void )
{
    List_T_P Root;
    List_T_P C_Root;
    List_T_P Temp, Head;
    List_T Value;
    char *Line;
    char ch;

    Root = NULL;

    while( NULL != ( Line = getword( stdin ) ) )
    {
        ch = tolower( Line[ 0 ] );
        if( NULL == ( Value.Element = malloc( sizeof( char ) ) ) )
            exit( EXIT_FAILURE );
        Value.Link = NULL;
        memmove( Value.Element, &ch, sizeof( char ) );

        if( NULL == ( C_Root = Find( Root, &Value, com1 ) ) )
        {
            Insert( &Root, &Value, sizeof( List_T ), com1 );
            C_Root = Find( Root, &Value, com1 ); 
        }
        else
            free( Value.Element );

        Temp = ( List_T_P )( C_Root->Element );
        if( NULL == Find( Temp->Link, Line, com2 ) )
            Insert( &Temp->Link, Line, strlen( Line ) + 1, com2 );
        free( Line );
    }

    Print( Root, Print1 );

    while( NULL != ( Head = First( Root ) ) )
    {
        Temp = ( List_T_P )Head->Element;
        Delete( &Temp->Link );
        DelFirst( &Root );
    }

    return 0;
}

int
com1( void *a, void *b )
{
    List_T_P A, B;
    char *ch1, *ch2;

    A = ( List_T_P )a;
    B = ( List_T_P )b;
    
    ch1 = ( char * )(A->Element);
    ch2 = ( char * )(B->Element);

    return *ch2 - *ch1;
}

int
com2( void *a, void *b )
{
    return strcmp( ( char * )b, ( char * )a );
}

void
Print1( void *a )
{
    List_T_P A;

    A = ( List_T_P )a;
    printf( "\n%c:\n",*( ( char * )( A->Element ) ) );
    Print( A->Link, Print2 );
}

void
Print2( void *a )
{
    printf( "%s\n", ( char * )a );
}




[此贴子已经被作者于2017-4-29 18:27编辑过]

搜索更多相关主题的帖子: 单词 通用 
2017-04-28 20:47
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 2楼 书生牛犊
这个,我发了啊,在置顶贴里。
通用链表。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-28 22:10
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 4楼 书生牛犊
所有东西都放在一起,当然不好啊,毫无疑问。

最简单的例子,某些函数会管理一些私有函数,或者私有的全局变量。
如果都放在一共文件里,那么就需要处理函数名或变量名的重复的问题。
还有其他的。
实现和借口分离,方便对实现进行修改。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-28 22:17
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 6楼 九转星河
百度了一下邻接表,好复杂。

我发在主题贴里的代码是索引表,比喻来说,就是中文字典的拼音检索页。

[此贴子已经被作者于2017-4-28 23:50编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-28 23:47
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 8楼 九转星河
肯定啊,链表是很有用的数据结构。
别说链表,栈和队列的通用或者说泛型,也早就有人写了。

你发的那些代码,我扫了一眼,找时间仔细来看看。
我靠,这还是卖咖啡写的,一定要找时间来学习下。

我跟你,不会是第一个,也永远不会是最后一个。只要还有人学C,就会有人尝试将数据结构通用化。

[此贴子已经被作者于2017-4-28 23:55编辑过]


09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-04-28 23:53
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 10楼 九转星河
这就是字典的,只是效率还不够高。如果把值域改成树效率会提高很多。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-31 16:41
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:0 
回复 12楼 九转星河
表我只是了解个概述,具体实现还要一段时间。我并不喜欢单纯的仅仅去实现,那样无法对某种东西建立很深的理解,也许真是才智太低的原因。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-31 18:13
快速回复:链表的值是另一个链表
数据加载中...
 
   



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

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