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

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_排序

導航

<2025年11月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
30123456

統計

常用鏈接

留言簿(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>
            99综合电影在线视频| 中日韩高清电影网| 永久555www成人免费| 艳女tv在线观看国产一区| 久久一区亚洲| 欧美影院午夜播放| 国产精品网站在线| 亚洲免费中文| 亚洲摸下面视频| 国产精品视频免费在线观看| 亚洲欧美日韩国产一区二区| 夜夜嗨av一区二区三区免费区| 欧美激情中文不卡| 99在线精品视频在线观看| 亚洲国产美女| 免费欧美日韩国产三级电影| 亚洲国产成人精品久久| 欧美国产亚洲视频| 欧美精品在线网站| 亚洲一级黄色av| 亚洲一区二区久久| 国产一区二区三区不卡在线观看| 久久精品国产免费观看| 久久噜噜亚洲综合| 美女国内精品自产拍在线播放| 红桃视频国产一区| 麻豆成人精品| 免费欧美日韩国产三级电影| 亚洲国产精品成人综合| 亚洲黄色影院| 欧美久久视频| 中国成人亚色综合网站| 亚洲欧美日韩国产综合| 国产自产女人91一区在线观看| 久久久久国产精品厨房| 欧美成人激情视频免费观看| 日韩亚洲视频| 欧美与欧洲交xxxx免费观看| 国内精品嫩模av私拍在线观看 | 亚洲第一黄色网| 久久综合福利| 欧美伦理一区二区| 亚洲天堂网站在线观看视频| 性做久久久久久久久| 国产综合视频| 亚洲毛片在线观看.| 国产精品视频网站| 欧美激情中文不卡| 欧美日韩在线视频一区二区| 久久久久国产一区二区| 久久夜色精品亚洲噜噜国产mv| 一本色道综合亚洲| 欧美亚洲系列| 宅男噜噜噜66一区二区| 一区二区精品在线| 91久久精品国产91久久| 一区二区三区色| 亚洲另类黄色| 香蕉免费一区二区三区在线观看| 亚洲国内在线| 亚洲影院在线观看| 中国女人久久久| 久久gogo国模啪啪人体图| 亚洲素人在线| 久久久亚洲影院你懂的| 久久av老司机精品网站导航| 久久久久在线| 欧美在线观看视频| 欧美日韩精品福利| 亚洲人成小说网站色在线| 性欧美超级视频| 一区二区三区www| 免费在线观看精品| 久久嫩草精品久久久精品| 国产精品一区视频网站| 亚洲第一色在线| 精品不卡视频| 亚洲欧美在线一区| 欧美在线观看网站| 欧美喷潮久久久xxxxx| 欧美成人情趣视频| 国产亚洲一区二区三区在线播放| 午夜欧美精品| 国产精品国产三级国产专播精品人 | 免费在线观看精品| 久久永久免费| 国产精品乱码一区二区三区| 亚洲三级观看| 亚洲高清不卡一区| 久久久久久亚洲综合影院红桃 | 在线精品国产欧美| 亚洲免费一区二区| 中国女人久久久| 欧美精品18+| 欧美v亚洲v综合ⅴ国产v| 国产精品日韩专区| 国产精品99久久久久久久vr| 在线午夜精品| 欧美日韩国产bt| 一区二区三区高清在线观看| 亚洲免费不卡| 国产精品vip| 一区二区三区精品久久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 麻豆国产精品777777在线| 欧美国产专区| 亚洲精品孕妇| 国产精品jvid在线观看蜜臀| 一区二区欧美视频| 久久精品亚洲精品| 精品1区2区3区4区| 欧美国产激情| 亚洲精品精选| 久久xxxx| 亚洲电影av| 欧美特黄一级大片| 在线亚洲高清视频| 久久美女艺术照精彩视频福利播放| 国产午夜精品全部视频在线播放| 中日韩视频在线观看| 国产精品视频| 性视频1819p久久| 亚洲国产精品一区二区www在线 | 日韩午夜av| 欧美电影美腿模特1979在线看| 一区二区欧美视频| 久久激情一区| 亚洲精一区二区三区| 欧美日产一区二区三区在线观看| 亚洲欧美国产77777| 久久久激情视频| 亚洲激情另类| 欧美日韩专区在线| 久久视频国产精品免费视频在线| 亚洲成人资源网| 久久精品亚洲精品| 亚洲黄色一区| 国产综合视频在线观看| 欧美激情亚洲精品| 久久精品99国产精品| 欧美激情欧美狂野欧美精品| 亚洲综合色网站| 伊人久久亚洲热| 国产精品伦一区| 欧美中在线观看| 亚洲一区二区三区成人在线视频精品| 久久婷婷av| 亚洲女ⅴideoshd黑人| 一区二区三区在线高清| 亚洲免费视频中文字幕| 欧美国产精品v| 久久久久久久综合| 日韩西西人体444www| 一区一区视频| 欧美视频在线一区二区三区| 欧美福利在线| 久久国产精品一区二区三区四区| 亚洲无毛电影| 久久精品人人做人人爽| 亚洲一区欧美激情| 狠狠v欧美v日韩v亚洲ⅴ| 国产精品美女主播在线观看纯欲| 久久亚洲欧美| 亚洲在线日韩| 国产欧美一区二区精品婷婷| 欧美大片免费观看在线观看网站推荐| 一本色道久久综合亚洲精品小说| 亚洲电影第1页| 久久男人资源视频| 久久人人97超碰国产公开结果| 亚洲国产精品福利| 激情综合中文娱乐网| 欧美影院久久久| 亚洲一区欧美二区| 亚洲一区二区三区成人在线视频精品| 亚洲免费成人av电影| 亚洲精品一区二区在线观看| 女人色偷偷aa久久天堂| 久久中文在线| 男同欧美伦乱| 亚洲第一综合天堂另类专| 久久综合中文| 欧美成人日本| 欧美激情免费观看| 日韩视频在线免费| 亚洲精品一区二区三区樱花| 99视频有精品| 中文无字幕一区二区三区| 亚洲在线一区| 午夜精品久久| 久久久久成人网| 久久五月激情| 欧美色偷偷大香| 国产精品萝li| 精品动漫3d一区二区三区| 国语自产精品视频在线看一大j8 | 欧美一级网站| 欧美一级成年大片在线观看| 久久精品国产精品亚洲综合 | 久久精品99久久香蕉国产色戒|