按月归档: 6月 2007

【原创】一个简单数据存取的对象

最近刚好要做个有联动的分类选择,就写了下面这个东西,令人郁闷的javascript

cat = {
data : function (code,name,price,discount){
    this.code = code;
    this.name = name;
    this.price = price;
    this.discount = discount;
},
get : function(code){
    if (!code || code.length % 3 != 0 || code.length < 3)
    {
      return false;
    }
    if(cat.getlevel(code.length / 3)[code]){
      return cat.getlevel(code.length / 3)[code];
    } else {
      return false;
    }
},

add : function (code,name,price,discount){
    if(!cat["lv_" + code.length / 3 ]){
      cat["lv_" + code.length / 3 ]     = new Object();
      cat["lv_" + code.length / 3 ].len = 0;
    }
    cat["lv_" + code.length / 3 ][code] = new cat.data(code,name,price,discount );
    cat["lv_" + code.length / 3 ].len++;
},

getlevel : function (level){
    if(cat["lv_" + level]){
      return cat["lv_" + level]
    } else {
      return false;
    }
},

getsub : function( code ){
    code = new String(code);
    datas = new Object();
    level = code.length / 3 + 1;
    sub   = cat.getlevel(level);
    count = 0;
    for(var item in sub){
      if(sub[item].code){
        if(sub[item].code.substr(0,code.length) == code ){
          datas[sub[item].code] = sub[item];
          count++;
        }
      }
    }
    datas.len = count;
    if(count == 0){return false;}
    return datas;
}
}

附部份测试数据

cat.add(‘001′,’魔兽世界’);
cat.add(‘001001′,’一区’);
cat.add(‘001001001′,’伊瑟拉’);
cat.add(‘001001001001′,’联盟’,’0.2617′,’1.00′);
cat.add(‘001001001002′,’部落’,’0.6229′,’1.00′);
cat.add(‘001001002′,’卡德罗斯’);
cat.add(‘001001002001′,’联盟’,’0.3297′,’1.00′);
cat.add(‘001001002002′,’部落’,’0.7794′,’1.00′);
cat.add(‘001001003′,’卡扎克’);
cat.add(‘001001003001′,’联盟’,’0.9082′,’1.00′);
cat.add(‘001001003002′,’部落’,’0.2026′,’1.00′);
cat.add(‘001001004′,’回音山’);
cat.add(‘001001004001′,’联盟’,’0.2884′,’1.00′);
cat.add(‘001001004002′,’部落’,’0.8341′,’1.00′);
cat.add(‘001001005′,’国王之谷’);

还是感觉好麻烦 做联动的时候还是很郁闷啊····没有什么好办法

我太笨了

Read: 820

[C相关]链表的c语言实现

准备:动态内存分配
一、为什么用动态内存分配
但我们未学习链表的时候,如果要存储数量比较多的同类型或同结构的数据的时候,总是使用一个数组。比如说我们要存储一个班级学生的某科分数,总是定义一个float型(存在0.5分)数组:
float score[30];
但是,在使用数组的时候,总有一个问题困扰着我们:数组应该有多大?
在很多的情况下,你并不能确定要使用多大的数组,比如上例,你可能并不知道该班级的学生的人数,那么你就要把数组定义得足够大。这样,你的程序在运行时就 申请了固定大小的你认为足够大的内存空间。即使你知道该班级的学生数,但是如果因为某种特殊原因人数有增加或者减少,你又必须重新去修改程序,扩大数组的 存储范围。这种分配固定大小的内存分配方法称之为静态内存分配。但是这种内存分配的方法存在比较严重的缺陷,特别是处理某些问题时:在大多数情况下会浪费 大量的内存空间,在少数情况下,当你定义的数组不够大时,可能引起下标越界错误,甚至导致严重后果。
那么有没有其它的方法来解决这样的外呢体呢?有,那就是动态内存分配。
所谓动态内存分配就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不象数组等静态内存分配方法那样需要预先分配存储空 间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求的大小。从以上动、静态内存分配比较可以知道动态内存分配相对于静态内存分配的特点:
1、不需要预先分配存储空间;
2、分配的空间可以根据程序的需要扩大或缩小。
二、如何实现动态内存分配及其管理
要实现根据程序的需要动态分配存储空间,就必须用到以下几个函数
1、malloc函数
malloc函数的原型为:
void *malloc (unsigned int size)
其作用是在内存的动态存储区中分配一个长度为size的连续空间。其参数是一个无符号整形数,返回值是一个指向所分配的连续存储域的起始地址的指针。还有 一点必须注意的是,当函数未能成功分配存储空间(如内存不足)就会返回一个NULL指针。所以在调用该函数时应该检测返回值是否为NULL并执行相应的操 作。
下例是一个动态分配的程序例题(1):
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
main()
{
int count,*array; /*count是一个计数器,array是一个整型指针,也可以理解为指向一个整型数组的首地址*/
if((array=(int *) malloc(10*sizeof(int)))==NULL)
{
printf("不能成功分配存储空间。");
exit(1);
}
for (count=0;count<10;count++) /*给数组赋值*/
array[count]=count;
for(count=0;count<10;count++) /*打印数组元素*/
printf("%2d",array[count]);
free(array);
}
上例中动态分配了10个整型存储区域,然后进行赋值并打印。例中if((array(int *) malloc(10*sizeof(int)))==NULL)语句可以分为以下几步:
1)分配10个整型的连续存储空间,并返回一个指向其起始地址的整型指针
2)把此整型指针地址赋给array
3)检测返回值是否为NULL
2、free函数
由于内存区域总是有限的,不能不限制地分配下去,而且一个程序要尽量节省资源,所以当所分配的内存区域不用时,就要释放它,以便其它的变量或者程序使用。这时我们就要用到free函数。
其函数原型是:
void free(void *p)
作用是释放指针p所指向的内存区。
其参数p必须是先前调用malloc函数或calloc函数(另一个动态分配存储区域的函数)时返回的指针。给free函数传递其它的值很可能造成死机或其它灾难性的后果。
注意:这里重要的是指针的值,而不是用来申请动态内存的指针本身。例:
int *p1,*p2;
p1=malloc(10*sizeof(int));
p2=p1;
……
free(p2) /*或者free(p2)*/
malloc返回值赋给p1,又把p1的值赋给p2,所以此时p1,p2都可作为free函数的参数。
malloc函数是对存储区域进行分配的。
free函数是释放已经不用的内存区域的。
所以由这两个函数就可以实现对内存区域进行动态分配并进行简单的管理了。

本节课后
问题:
1、free函数有什么用处?
2、stdio.h、stdlib.h、malloc.h 这三个头文件在程序例题(1)中起到了什么作用?
3、#include <stdio.h>和#incluce "stdio.h"有什么不同?
体会:
1、对照程序例题(1)体会“(array=(int *) malloc(10*sizeof(int)))==NULL”这一句的写法。
目的:
1、为什么要“动态分配内存”,如何做到“动态内存分配”。

Read: 815

一个论坛 靠什么留住人

一个论坛、一个版块能留住会员的因素是多方面的,但是其中很重要的一点就是对版块的经营观念,有一些版主认为要想留住会员必需得发一些有吸引力的帖子才行。所以有些版主在论坛兴建的初期拼命写作,绞尽脑汁要码出一些好文章来,或者是到别的网站、论坛寻找一些精彩的帖子转帖过来,事实证明这样做版块上文章帖了一大堆人气的提升效果并不明显,这到底是为什么呢?
会员来到论坛的目的无非有三:
1、发表自己对生活、对社会、对工作的一些看法,渴望和别人交流。
2、倾诉自己情感的得失、发泄现实生活中的愤懑、表达自己在生活中的感受。
3、展示自己的能力、寻找知音和共鸣、体验在虚拟世界中成功的快感。
从上面三点上来看会员们来论坛不是被动的欣赏,而是要主动的交流和互动。
说白了,版主要确立的经营观念不是你来欣赏我,而是我要欣赏你。
如果会员要欣赏好文章就无需来论坛了,各大网站、著名的网上书屋、文学专题网站上的热点新闻、好帖子、经典名著多如牛毛。论坛上文章的精彩程度无论如何都不能与之相比。
论坛上最主要的功能、最有魅力之处是交流互动,在论坛兴建的初期版主贴出几篇象样的文章来吸引会员是对的,但是当已经有会员注册时注意力应该转到对会员帖子的回复上来,在论坛上任何一个发帖子的人都渴望别人对自己所发帖子的关注,不论是赞美、批评或是讨论都能吸引会员再次回过头来。(当然版主不要对会员高高在上的指指点点,这样会令会员反感。)
发帖子的人最郁闷的是自己发出的帖子没人理会,因为任何一个人所发出的主题帖子(跟帖灌水除外)都是经过一番考虑的,有些主题帖子耗费了作者大量的心血和时间。有句话说得好:对别人最大的藐视就是不屑。自己发出的帖子没人理睬比埃了几“砖头”还落寞失望。
作为一个好的版主一定要控制住展示自己主题写作能力的欲望,版主不是不能发主题帖子,而是要适度,不能发得太多,要把重点放在对会员帖子上的回复上来。
版主虽然不是什么行政干部,但是他(她)引导着自己所管理板块的发帖风格,在某些论坛的有些版主很习惯于带头发主题,会员们为了使自己不被淹没,也都跟着大量发主题而不愿回复。这就形成了版块上马拉松式的发帖风格,大家都只管发帖互不理睬,有些帖子根本就没人翻看过。时间长了会员们就会失去热情,论坛也就冷落了下来。
所以,作为一个版主要做好的最基本的工作,是回复每一位会员新发的帖子。引导自己的版块形成互动交流的风格。
当然,搞好一个论坛、版块认真回复每一位会员的帖子只是最基本的要求。
一个论坛要体现它独到的魅力,成为网上的一个优秀论坛还有许多的工作要做。

Read: 584

建站思想?

1.250定律

     拉德认为:每一位顾客身后,大体有250名亲朋好友。如果您赢得了一位顾客的好感,就意味着赢得了250个人的好感;反之,如果你得罪了一名顾客,也就意 味着得罪了250 名顾客。在你的网站访客中,一个访客可能可以带来一群访客,任何网站都有起步和发展的过程,这个过程中此定律尤其重要。

     2.达维多定律

     达维多认为,一个企业要想在市场上总是占据主导地位,那么就要做到第一个开发出新产品,又第一个淘汰自己的老产品。国内网站跟风太严重,比如前段时间的格 子网,乞讨网,博客网,一个成功了,大家一拥而上。但实际效果是,第一个出名的往往最成功,所以在网站的定位上,要动自己的脑筋,不是去捡人家剩下的客 户。同理,买人家出售的数据来建站效果是很糟糕的。

     3.木桶定律

     水桶定律是指,一只水桶能装多少水,完全取决于它最短的那块木板。这就是说任何一个组织都可能面临的一个共同问题,即构成组织的各个部分往往决定了整个组 织的水平。注意审视自己的网站,是速度最糟糕?美工最糟糕?宣传最糟糕?你首先要做的,不是改进你最强的,而应该是你最薄弱的。

     4.马太效应

     《新约》中有这样一个故事,一个国王远行前,交给三个仆人每人一锭银子,吩咐他们:“你们去做生意,等我回来时,再来见我。”国王回来时,第一个仆人说: “主人,你交给我们的一锭银子,我已赚了10锭。”于是国王奖励他10座城邑。第二个仆人报告说:“主人,你给我的一锭银子,我已赚了5锭。” 于是国王例奖励了他5座城邑。第三个仆人报告说:“主人,你给我的一锭银子,我一直包在手巾里存着,我怕丢失,一直没有拿出来。”于是国王命令将第三个仆 人的一锭银子也赏给第一个仆人,并且说:“凡是少的,就连他所有的也要夺过来。凡是多的,还要给他,叫他多多益善。”这就是马太效应。在同类网站中,马太 效应是很明显的。一个出名的社区,比一个新建的社区,更容易吸引到新客户。启示是,如果你无法把网站做大,那么你要做专。作专之后再做大就更容易。

     5.手表定理

     手表定理是指一个人有一只表时,可以知道现在是几点钟,而当他同时拥有两只表时却无法确定。

     一个网站,你只需要关注你特定的用户群需求。不要在意不相干人的看法。

     6.不值得定律

     不值得定律:不值得做的事情,就不值得做好不要过度seo,如果你不是想只做垃圾站。不要把时间浪费在美化再美化页面,优化再优化程序,在你网站能盈利后,这些事情可以交给技术人员完成。

     7.彼得原理

     劳伦斯.彼得认为:在各种组织中,由于习惯于对在某个等级上称职的人员进行晋升提拔,因而雇员总是趋向于晋升到其不称职的地位。

     不要轻易改变自己网站的定位。如博客网想变门户,盛大想做娱乐,大家拭目以待吧。

     8.零和游戏原理

     当你看到两位对弈者时,你就可以说他们正在玩“零和游戏”。因为在大多数情况下,总会有一个赢,一个输,如果我们把获胜计算为得1分,而输棋为-1分,那 么,这两人得分之和就是:1+(-1)=0 不要把目光一直盯在你的竞争网站上,不要花太多时间抢它的访客。我们把这些时间用来寻找互补的合作网站,挖掘新访客。

     9.华盛顿合作规律

     华盛顿合作规律说的是:一个人敷衍了事,两个人互相推诿, 三个人则永无成事之日。

     如果你看准一个方向,你自己干,缺人手就招。不要轻易找同伴一起搞网站,否则你会发现,日子似乎越过越快了,事情越做越慢了。

     10.邦尼人力定律

     一个人一分钟可以挖一个洞,六十个人一秒种却挖不了一个洞。合作是一个问题,如何合作也是一个问题。你需要有计划。

     11.牛蛙效应

     把一只牛蛙放在开水锅里,牛蛙会很快跳出来;但当你把它放在冷水里,它不会跳出来,然后慢慢加热,起初牛蛙出于懒惰,不会有什么动作,当水温高到它无法忍 受的时候,想出来,但已经没有了力气。如果你是soho,注意关注你的财务。不要等到没钱了再想怎么挣,你会发现那时候挣钱更难。

     12.蘑菇管理

     蘑菇管理是许多组织对待初出茅庐者的一种管理方法,初学者被置于阴暗的角落(不受重视的部门,或打杂跑腿的工作),浇上一头大粪(无端的批评、指责、代人受过),任其自生自灭(得不到必要的指导和提携)。

     做网站毕竟要遭遇这样的阶段,搜索引擎不理你,友情链接找不到,访客不上门。这是磨练。

     13.奥卡姆剃刀定律

     如无必要,勿增实体。

     把网站做得简单,再简单,简单到非常实用,而不是花俏。google的首页为什么比雅虎好?

     14.巴莱多定律(Paredo 也叫二八定律)

     你所完成的工作里80%的成果,来自于你20%的付出;而80%的付出,只换来20%的成果。

     随时衡量你所做的工作,哪些是最有效果的。

     1.马蝇效应

     林肯少年时和他的兄弟在肯塔基老家的一个农场里犁玉米地,林肯吆马,他兄弟扶犁,而那匹马很懒,慢慢腾腾,走走停停。可是有一段时间马走得飞快。林肯感到 奇怪,到了地头,他发现有一只很大的马蝇叮在马身上,他就把马蝇打落了。看到马蝇被打落了,他兄弟就抱怨说:”哎呀,你为什么要打掉它,正是那家伙使马跑 起来的嘛!” 在你心满意足的时候,去寻找你的马蝇。没有firefox,不会有ie7,firefox就是微软的马蝇之一。马蝇不可怕,怕的是会一口吃掉你的东西,像 ie当初对网景干的那样。

     2.最高气温效应

     每天最热总是下午2 时左右,我们总认为这个时候太阳最厉害,其实这时的太阳早已偏西,不再是供给最大热量的时候了。此时气温之所以最高,不过是源于此前的热量积累。

     你今天的网站流量,是你一个星期或更长时间前所做的事带来的。

     3.超限效应(溢出效应)

     刺激过多、过强和作用时间过久而引起心理极不耐烦或反抗的心理现象,称之为“超限效应”。别到别人论坛里发太多广告。别在自己网站上放太多广告。别在自己的论坛里太多地太明显地诱导话题。

     4.懒蚂蚁效应

     生物学家研究发现,成群的蚂蚁中,大部分蚂蚁很勤劳,寻找、搬运食物争先恐后,少数蚂蚁却东张西望不干活。当食物来源断绝或蚁窝被破坏时,那些勤快的蚂蚁 一筹莫展。“懒蚂蚁”则“挺身而出”,带领众伙伴向它早已侦察到的新的食物源转移。不要把注意力仅仅放在一个网站上,即使这个网站现在为你带来一切。你要 给自己一些时间寻找新的可行的方向,以备万一。

     5.长尾理论

     ChrisAnderson认为,只要存储和流通的渠道足够大,需求不旺或销量不佳的产品共同占据的市场份额就可以和那些数量不多的热卖品所占据的市场份 额相匹敌甚至更大。对于搜索引擎,未必你需要一个热门词排在第一位,如果有一千个冷门词排在第一位,效果不但一样,还会更稳定更长远。

     6.破窗理论

     栋建筑上的一块玻璃,又没有及时修好,别人就可能受到某些暗示性的纵容,去打碎更多的玻璃。管理论坛时,如果你发现第一个垃圾贴,赶紧删掉他吧。想想:落伍现在为什么那么多××贴?现在控制比最初控制难多了。

     7.“羊群效应”,又称复制原则(Copy Strategy)

     一个羊群(集体)是一个很散乱的组织,平时大家在一起盲目地左冲右撞。如果一头羊发现了一片肥沃的绿草地,并在那里吃到了新鲜的青草,后来的羊群就会一哄而上,争抢那里的青草,全然不顾旁边虎视眈眈的狼,或者看不到其它地方还有更好的青草。

     不要轻易跟风,保持自己思考的能力。

     8.墨菲定律

     如果坏事情有可能发生,不管这种可能性多么小,它总会发生,并引起最大可能的损失。

     除非垃圾站,否则不要作弊,对搜索引擎不要,对广告也不要。

     9.光环效应

     人们对人的某种品质或特点有清晰的知觉,印象比较深刻、突出,这种强烈的知觉,就像月晕形式的光环一样,向周围弥漫、扩散,掩盖了对这个人的其他品质或特点的认识。

     不要轻易崇拜一个人或者公司、一个概念、一种做法。

     10.蝴蝶效应

     一只亚马逊河流域热带雨林中的蝴蝶,偶尔扇动几下翅膀,两周后,可能在美国德克萨斯州引起一场龙卷风。

     不管你做什么,网站或者其他,你都应该关注新闻。机遇或者灾难可能就在那。

     11.阿尔巴德定理

     一个企业经营成功与否,全靠对顾客的要求了解到什么程度。我赞同别人的点评:看到了别人的需要,你就成功了一半;满足了别人的需求,你就成功了全部。尤其是做网站。

     12.史密斯原则

     如果你不能战胜他们,你就加入到他们之中去。

     不要试图做孤胆英雄。如果潮流挡不住,至少,你要去思考为什么。

转自:比尔盖茨稀饭

Read: 594

补码是什么?

用[x]表示机器数(原码),x是真值(二进制)
   x=+0.1001,则[x]原=0.1001
x=-0.1001,则[x]原=1.1001

对于0,原码中有“+0”、“-0”之分,故有两种形式:
[+0]原=0.000…0
[-0]原=1.000…0

采用原码表示法简单易懂,但它的最大缺点是加法运算复杂。这是因为,当两数相加时,如果是同号则数值相加;如果是异号,则要进行减法。而在进行减法时还要比较绝对值的大小,然后大数减去小数,最后还要给结果选择符号。

为了解决这些矛盾,人们找到了补码表示法。机器数的补码可由原码得到。如果机器数是正数,则该机器数的补码与原码一样;如果机器数是负数,则该机器数的补码是对它的原码(除符号位外)各位取反,并在未位加1而得到的。

负数用补码表示时,可以把减法转化为加法。这样,在计算机中实现起来就比较方便
[x]补= {   x       1>x≥0
      {   2+x=2-|x| 0≥x≥-1

   x=+0.1011,则[x]补=0.1011
x=-0.1011,则[x]补=10+x=10.0000-0.1011=1.0101

对于0,[+0]补=[-0]补=0.0000              (mod 2)

例子中是以定点小数为例。

补码的原理可以用钟表来描述

如设标准时间为4点正;一只表已经7点了,为了校准时间,可以采用两种方法:一是将时针退 7-4=3 格;一是将时针向前拨12-3=9格。即7-3和7+9(mod12)等价,因此,把负数用补码表示的mod2操作,可以把减法转化为加法。

Read: 960