青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

A Za, A Za, Fighting...

堅信:勤能補拙

PKU 2418 Hardwood Species

問題:
http://poj.org/problem?id=2418

思路:
題意清晰明了,不難,用三種方法分別實現:
快速排序
動態生成節點的二叉查找樹
靜態分配節點的二叉查找樹

結果發現,原來對于快速排序與靜態分配節點都不是很熟悉,二維數組的快速排序分析見http://m.shnenglu.com/Joe/archive/2010/10/29/131746.html,而動態生成節點則需要注意如果函數需要修改指針,那么必須傳遞指向指針的指針,因為C是值傳遞的

另外,我以為靜態分配節點應該比動態分配節點節約很多時間的,結果居然差不多...而快速排序在這題明顯是最耗時的

代碼(快排)
 1 /* 35640K 1844MS */
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<string.h>
 5 #define MAX_LEN 36
 6 #define MAX_NUM 1000001
 7 char species[MAX_NUM][MAX_LEN];
 8 
 9 int
10 cmp(const void *arg1, const void *arg2)
11 {
12     return strcmp((char *)arg1, (char *)arg2);
13 }
14 
15 int
16 main(int argc, char **argv)
17 {
18     int i, count, total = 0;
19     while(gets(species[total]) != NULL)
20         ++total;
21     qsort(species, total, sizeof(species[0]), cmp);
22     count = 1;
23     for(i=1; i<total; i++) {
24         if(strcmp(species[i], species[i-1]) == 0
25             ++count;
26         else {
27             printf("%s %.4f\n", species[i-1], (count*100.0)/total);
28             count = 1;
29         }
30     }
31     printf("%s %.4f\n", species[total-1], (count*100.0)/total);
32 }

代碼(動態分配節點的BST,原本想實現下destroy函數的,結果怕麻煩就留給系統回收吧(*^__^*) 嘻嘻……)
 1 /* binary search tree(dynamic allocation) */
 2 /* 544K 1188MS */
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 #include<string.h>
 6 #include<assert.h>
 7 #define MAX_LEN 36
 8 struct Node {
 9     char spec[MAX_LEN];
10     int count;
11     struct Node *left, *right;
12 };
13 int total;
14 
15 struct Node *
16 create_node(char *str)
17 {    
18     struct Node *node = (struct Node *)malloc(sizeof(struct Node));
19     assert(node != NULL);
20     strcpy(node->spec, str);
21     node->left = node->right = NULL;
22     node->count = 1;
23     return node;
24 }
25 
26 void
27 insert(struct Node **root, char *str)
28 {
29     int ret;
30     struct Node *node;
31     if(*root==NULL) {
32         *root = create_node(str);
33         return;
34     }
35     ret = strcmp((*root)->spec, str);
36     if(ret == 0)
37         ++((*root)->count);
38     else if(ret < 0)
39         insert(&((*root)->right), str);
40     else
41         insert(&((*root)->left), str);
42 }
43 
44 void
45 inorder(struct Node *root)
46 {
47     if(root == NULL)
48         return;
49     inorder(root->left);
50     printf("%s %.4f\n", root->spec, (root->count)*100.0/total);
51     inorder(root->right);
52 }
53 
54 void
55 destroy(struct Node **root)
56 {
57 }
58 
59 int
60 main(int argc, char **argv)
61 {
62     char str[MAX_LEN];
63     struct Node *bst = NULL;
64     total = 0;
65     while(gets(str) != NULL) {
66         ++total;
67         insert(&bst, str);
68     }
69     inorder(bst);
70 }

代碼(靜態分配節點的BST)
 1 /* binary search tree(static allocation) */
 2 /* 492K 1188MS */
 3 #include<stdio.h>
 4 #include<stdlib.h>
 5 #include<string.h>
 6 #include<assert.h>
 7 #define MAX_LEN 36
 8 #define MAX_NUM 10007
 9 #define ROOT 1
10 struct Node {
11     char spec[MAX_LEN];
12     int count;
13     int left, right;
14 }bst[MAX_NUM];
15 int cur_index, total;
16 
17 int
18 find(int root, char *str)
19 {
20     int ret, parent, cur = root;
21     while(cur != 0) {
22         parent = cur;
23         ret = strcmp(bst[cur].spec, str);
24         if(ret == 0) {
25             ++bst[cur].count;
26             return 0;
27         } else if(ret < 0) {
28             cur = bst[cur].right; 
29         } else {
30             cur = bst[cur].left;
31         }
32     }
33     return parent;
34 }
35 
36 #define ADD(index, str) { \
37     strcpy(bst[index].spec, str); \
38     bst[index].left = bst[index].right = 0; \
39     bst[index].count = 1; \
40     ++index; }
41 
42 void
43 insert(int parent, char *str)
44 {
45     int ret = strcmp(bst[parent].spec, str);
46     assert(ret != 0);
47     if(ret < 0)
48         bst[parent].right = cur_index;
49     else 
50         bst[parent].left = cur_index;
51     ADD(cur_index, str);
52 }
53 
54 void
55 inorder(int index) 
56 {
57     if(index == 0)
58         return;
59     inorder(bst[index].left);
60     printf("%s %.4f\n", bst[index].spec, (bst[index].count*100.0)/total);
61     inorder(bst[index].right);
62 }
63 
64 int
65 main(int argc, char **argv)
66 {
67     int parent;
68     char str[MAX_LEN];
69     total = 1;
70     cur_index = ROOT;
71     gets(str);
72     ADD(cur_index, str); /* create the root node first */
73     while(gets(str) != NULL) {
74         ++total;
75         if((parent=find(ROOT, str)) > 0)
76             insert(parent, str);
77     }
78     inorder(ROOT);
79 }

posted on 2010-10-30 00:59 simplyzhao 閱讀(331) 評論(0)  編輯 收藏 引用 所屬分類: A_排序

導航

<2010年10月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

統計

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            开心色5月久久精品| 欧美一区二视频| 国产精品超碰97尤物18| 欧美高清在线视频观看不卡| 久久久99精品免费观看不卡| 午夜久久影院| 欧美中文在线观看国产| 久久综合成人精品亚洲另类欧美| 久久久久国产精品厨房| 免费日韩av片| 欧美视频一区二区在线观看| 国产精品美女久久久久久久| 国产乱码精品| 亚洲第一在线视频| 亚洲福利国产| 一本一本久久a久久精品综合妖精| 一区二区三区欧美日韩| 欧美精品成人| 欧美精品一区二区三区四区| 欧美亚一区二区| 国产一区二区三区四区五区美女| 亚洲第一中文字幕在线观看| 在线综合亚洲| 久久婷婷丁香| 中文精品99久久国产香蕉| 欧美中文字幕在线| 欧美日韩亚洲国产一区| 一区在线播放| 欧美一进一出视频| 亚洲国产裸拍裸体视频在线观看乱了中文 | 久久精品国产96久久久香蕉| 美女视频一区免费观看| 亚洲精品孕妇| 久久久久久久久伊人| 欧美精品大片| 在线观看欧美| 欧美自拍丝袜亚洲| 亚洲激情欧美| 久久免费观看视频| 国产精品一级二级三级| 亚洲精品一区二区三区樱花| 久久精品国亚洲| 一本色道久久综合亚洲精品不卡| 久久高清福利视频| 国产精品久久久久9999| 亚洲精品少妇网址| 母乳一区在线观看| 亚洲女同同性videoxma| 欧美日韩国产成人在线91| 精品成人乱色一区二区| 午夜国产一区| 亚洲一区日韩在线| 国产精品电影网站| 亚洲网站在线看| 91久久国产综合久久蜜月精品| 久久久午夜视频| 国产在线播放一区二区三区| 欧美在线播放一区二区| 亚洲一区二区三区涩| 欧美日韩在线视频首页| 99精品热视频只有精品10| 亚洲国产精品一区在线观看不卡| 久久综合狠狠综合久久综青草| 国语自产偷拍精品视频偷 | 久久综合网色—综合色88| 国产日韩视频一区二区三区| 亚洲自拍偷拍麻豆| 一道本一区二区| 国产精品美女久久久久aⅴ国产馆| 宅男在线国产精品| 日韩午夜三级在线| 欧美午夜激情在线| 小黄鸭视频精品导航| 亚洲欧美中文另类| 国产日韩精品一区二区浪潮av| 欧美一区成人| 久久精品国产视频| 亚洲大片精品永久免费| 欧美成人自拍视频| 欧美精品一二三| 亚洲欧美高清| 久久国产精品99国产精| 在线观看视频一区二区欧美日韩| 蜜臀久久久99精品久久久久久| 久久久久久久综合狠狠综合| 亚洲电影自拍| 亚洲九九精品| 国产欧美精品一区aⅴ影院| 国产精品一区二区三区免费观看| 久久国产精品电影| 久久香蕉国产线看观看av| 亚洲三级免费电影| 这里是久久伊人| 国自产拍偷拍福利精品免费一| 亚洲国产另类精品专区| 国产精品五月天| 欧美成人免费在线视频| 欧美日韩综合视频| 久久久免费av| 欧美日韩一区二区三区在线 | 久久国产欧美精品| 免费在线成人av| 午夜日韩视频| 麻豆精品视频在线观看视频| 在线亚洲精品福利网址导航| 午夜视频在线观看一区二区三区 | 欧美专区一区二区三区| 欧美全黄视频| 久久亚洲一区二区三区四区| 欧美日韩三区| 欧美成人一区二区三区片免费| 国产精品家庭影院| 欧美激情四色| 激情五月综合色婷婷一区二区| 亚洲激情在线视频| 在线免费观看一区二区三区| 亚洲影院一区| 亚洲欧美国产三级| 欧美精品久久久久久| 欧美成人亚洲成人日韩成人| 国产专区综合网| 亚洲视频第一页| 国产精品乱码一区二三区小蝌蚪 | 久久久久久久综合| 久久国产精品久久久久久久久久 | 国产一区二区三区不卡在线观看| 日韩视频在线观看一区二区| 亚洲人成高清| 久久深夜福利免费观看| 久久成人亚洲| 国产精品成人免费精品自在线观看| 免费不卡在线观看| 很黄很黄激情成人| 久久久久久久久综合| 久久久国产成人精品| 国产精品理论片| 亚洲性xxxx| 午夜视频精品| 国产日韩在线一区二区三区| 中文精品视频一区二区在线观看| 亚洲最新在线视频| 欧美精品一区在线播放| 91久久久久久久久| 亚洲欧洲综合另类在线| 嫩模写真一区二区三区三州| 久久综合婷婷| 亚洲国产精品久久精品怡红院| 久久久女女女女999久久| 榴莲视频成人在线观看| 亚洲国产成人精品女人久久久| 久久免费国产精品| 亚洲高清视频的网址| 一本不卡影院| 国产精品成人一区二区三区吃奶| 亚洲色图制服丝袜| 欧美专区在线观看| 在线欧美不卡| 欧美日韩视频一区二区三区| 亚洲一区国产| 久久久精品国产免费观看同学| 影院欧美亚洲| 欧美激情导航| 亚洲免费视频一区二区| 久久久久国产精品麻豆ai换脸| 在线播放日韩| 国产精品v亚洲精品v日韩精品| 亚洲欧美在线观看| 欧美激情亚洲国产| 性久久久久久久久久久久| 在线播放中文一区| 国产精品狠色婷| 美国成人直播| 亚洲欧美www| 亚洲第一黄色| 欧美伊人久久久久久久久影院| 在线观看福利一区| 欧美日韩亚洲天堂| 久久久久九九九| 一区二区欧美在线| 欧美aaaaaaaa牛牛影院| 亚洲一级一区| 亚洲电影观看| 国产欧美在线观看| 欧美美女日韩| 久久在线91| 先锋a资源在线看亚洲| 亚洲国产一区二区a毛片| 欧美亚洲综合另类| 一二三区精品| 欧美精品在线看| 久久久精品国产99久久精品芒果| 亚洲人成网站精品片在线观看| 久久成人羞羞网站| 亚洲欧美一区二区视频| 亚洲精品美女在线观看| 国产一区二区三区日韩欧美| 国产精品v欧美精品v日本精品动漫| 欧美/亚洲一区| 久久男人资源视频| 欧美影院视频|