int main (int argc, const char * argv[])
{
int i = 0;
//为了简化,下面使用了最恶心的初始化方法。方便复制粘贴
struct sorted_order_str_map_with_thread smwt[20] = {{NULL, NULL, 0 NULL}};
smwt[0].sorted_order_str =smwt[0].normal_order_str = "323";
smwt[0].self = &smwt[0];
smwt[0].tag = 1;
smwt .sorted_order_str = smwt .normal_order_str="223";
smwt .self = &smwt ;
smwt .tag = 2;
smwt .sorted_order_str =smwt .normal_order_str= "723";
smwt .self = &smwt ;
smwt .tag = 3;
smwt .sorted_order_str =smwt .normal_order_str= "823";
smwt .self = &smwt ;
smwt .tag = 4;
smwt .sorted_order_str =smwt .normal_order_str= "123";
smwt .self = &smwt ;
smwt .tag = 5;
smwt .sorted_order_str =smwt .normal_order_str= "423";
smwt .self = &smwt ;
smwt .tag = 6;
smwt .sorted_order_str =smwt .normal_order_str= "123";
smwt .self = &smwt ;
smwt .tag = 7;
smwt .sorted_order_str =smwt .normal_order_str= "723";
smwt .self = &smwt ;
smwt .tag = 8;
smwt .sorted_order_str = smwt .normal_order_str="523";
smwt .self = &smwt ;
smwt .tag = 9;
smwt .sorted_order_str =smwt .normal_order_str= "823";
smwt .self = &smwt ;
smwt .tag = 10;
sort(smwt, 10, cmp_node, swap_node);
//下面使用了最恶心的输出,经典###
for (i = 0; i< 10; i++) {
printf("###:%s tag:%d\n", smwt[i].normal_order_str, smwt[i].tag);
}
for (i = 0; i< 10; i++) {
printf("@@@:%s tag:%d\n", smwt[i].sorted_order_str, smwt[i].tag);
}
for (i = 0; i< 10; i++) {
if (smwt[i].tag != 0){
printf("@@@&&:%s\n", smwt[i].normal_order_str);
}
}
return 0;
}
下面的一种方法使用了标准的二叉树插入,注意,插入仅仅是为了删除重复元素,实际上,各种语言各种库的标准Map实现很多也是使用了树,比如java.util中的TreeMap就是使用了红黑树。下面直接给出代码,基于排序二叉树的代码:
//
// main.c
// test-xcode
//
// Created by ya zhao on 11-12-17.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct string_node {
char *string;
int tag; //标示是否被删除
};
//标准排序二叉树
struct string_tree {
struct string_node *strn;
struct string_tree* left,*right;
};