LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 799|回复: 8

请教一代码!

[复制链接]
发表于 2004-11-10 21:00:29 | 显示全部楼层 |阅读模式
设单链表中存放着n个字符,我想写一个代码,可以判断该字符串是否有中心对称关系,例如:xyzzyx,xyzyx都算是中心对称的字符串。

谢谢了。赫赫
发表于 2004-11-10 23:37:33 | 显示全部楼层
代码呢
发表于 2004-11-11 09:13:06 | 显示全部楼层
知道有一个2分法的排序吗?就用那个类似的方法,
更好的我还没有!
发表于 2004-11-11 13:06:51 | 显示全部楼层
这个好像在编译原理有介绍,找本书看看吧,要是完全处理好的话,好像很麻烦!
发表于 2004-11-11 14:18:42 | 显示全部楼层
简单写一段代码,方便起见,直接用字符串,没用单链表,但原理一样:
  1. int
  2. main()
  3. {
  4.         int count,i;
  5.         char mystring[100];
  6.         printf("Input a string:");
  7.         scanf("%s",mystring);
  8.         count = strlen(mystring);
  9.         for (i=0;i<=(count/2);i++)
  10.         {
  11.                 if (mystring[i] == mystring[count-1-i])
  12.                 continue;
  13.                 else
  14.                 {
  15.                         printf("%s is not balanced.\n",mystring);
  16.                         return 1;
  17.                 }
  18.         }
  19.         printf("%s is balanced.\n", mystring);
  20.         return 0;
  21. }
复制代码
 楼主| 发表于 2004-11-11 15:03:33 | 显示全部楼层
谢谢。赫赫
发表于 2004-11-12 12:09:52 | 显示全部楼层
单链表和数组,差别大了点吧。。。
发表于 2004-11-12 14:20:48 | 显示全部楼层
我认为这个问题最好的解决方法就是把单链表中的字符保存在数组中再使用 kiron 的程序处理。

使用编译原理的内容解决是不行的。如果我们希望写出一个简单的文法,大概会是这个样子:
  1. S:
  2.     (nothing)
  3.     character
  4.     character S character
复制代码
然而,这个文法无法利用 LR 方法来处理,因为 character 并不能对移进/规约给出足够的提示。如果我们把可能出现的字符减少到 2 个(比如,a 和 b),就会简单一些。写出下面的文法:
  1. S:
  2.     (nothing)
  3.     A
  4.     B
  5.     A S A
  6.     B S B
  7. A:
  8.     a
  9. B:
  10.     b
复制代码
这样就可以轻松地用 LR 方法处理了。当可能出现的字符增多时,给出移进/规约信息的惟一方法就是为每个可能的字符保留一个非终结符。但是如果可能的字符数目非常大,这样做的结果还不如将链表中的信息存到数组中做。所以我认为最好不用编译原理的知识来解决它。

一点拙见,大家有什么看法呢?
发表于 2004-11-12 17:59:29 | 显示全部楼层
这种情况下使用单链表好像不合适哦
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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