fork download
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <cstdlib>
  5.  
  6.  
  7. using namespace std;
  8.  
  9.  
  10. struct NodeData {
  11. char name[99];
  12. };
  13.  
  14.  
  15. struct BstNode {
  16. NodeData *data;
  17. BstNode *left;
  18. BstNode *right;
  19. };
  20.  
  21. bool operator== (NodeData data1, NodeData data2) {
  22. return (strcmp(data1.name, data2.name) == 0);
  23. }
  24.  
  25. bool operator< (NodeData data1, NodeData data2) {
  26. return (strcmp(data1.name, data2.name) < 0);
  27. }
  28.  
  29.  
  30. BstNode *NewBstNode(NodeData*);
  31. BstNode *insertData(BstNode*, NodeData*);
  32. void serialize(BstNode*, FILE*);
  33. void deSerialize(BstNode*&, FILE*);
  34. bool searchData(BstNode*, NodeData*);
  35.  
  36.  
  37. int main() {
  38. /** Serialize */
  39. /*
  40.   BstNode *root = NULL;
  41.   NodeData *data = new NodeData();
  42.  
  43.   cin>>data->name;
  44.   root = insertData(root, data);
  45.   cin>>data->name;
  46.   root = insertData(root, data);
  47.  
  48.   FILE *fp = fopen("db.bin", "w");
  49.   serialize(root, fp);
  50. */
  51. /** DeSerialize */
  52.  
  53. BstNode *root = NULL;
  54.  
  55. FILE *fp = fopen("db.bin", "r");
  56.  
  57. deSerialize(root, fp);
  58. cout<<root->data->name;
  59.  
  60. return 0;
  61. }
  62.  
  63.  
  64. BstNode *NewBstNode(NodeData *data) {
  65. BstNode *newNode = new BstNode();
  66. newNode->data = data;
  67. newNode->left = NULL;
  68. newNode->right = NULL;
  69. return newNode;
  70. }
  71.  
  72.  
  73. BstNode *insertData(BstNode *root, NodeData *data) {
  74. NodeData *realdata = new NodeData();
  75. *realdata = *data;
  76. if(root == NULL) {
  77. root = NewBstNode(realdata);
  78. } else {
  79. if(memcmp(realdata->name, root->data->name, 1) <= 0) {
  80. root->left = insertData(root->left, realdata);
  81. } else {
  82. root->right = insertData(root->right, realdata);
  83. }
  84. }
  85. return root;
  86. }
  87.  
  88. void serialize(BstNode *root, FILE *fp) {
  89. if(root == NULL)
  90. return;
  91. fwrite(&root, sizeof(struct BstNode), 1, fp);
  92. serialize(root->left, fp);
  93. serialize(root->right, fp);
  94. }
  95.  
  96. void deSerialize(BstNode *&root, FILE *fp) {
  97. NodeData *data = new NodeData;
  98. if(!fread(data, sizeof(struct BstNode), 1, fp))
  99. return;
  100. root = NewBstNode(data);
  101. deSerialize(root->left, fp);
  102. deSerialize(root->right, fp);
  103. }
  104.  
  105. bool searchData(BstNode *root, NodeData *data) {
  106. if(root == NULL) {
  107. return false;
  108. } else if(*root->data == *data) {
  109. return true;
  110. } else if(*data < *root->data) {
  111. return searchData(root->left, data);
  112. } else {
  113. return searchData(root->right, data);
  114. }
  115. }
  116.  
Runtime error #stdin #stdout 0s 3452KB
stdin
Standard input is empty
stdout
Standard output is empty