Advertisement
ithoran

Struk Lab 4

Apr 24th, 2016
347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.78 KB | None | 0 0
  1. //HashTable
  2. #pragma once
  3. #include "HashObj.h"
  4.  
  5. class HashTable {
  6. protected:
  7.     friend class HashObject;
  8.     int length;
  9.     int count;
  10.     HashObject* niz;
  11.  
  12.     int f(char* x) {
  13.         int i = 0;
  14.         while (x[i + 1] != 0) {
  15.             i++;
  16.         }
  17.         int rez = x[0] * 13 + x[i] * 13;
  18.         return rez % length;
  19.     }
  20.  
  21.     int g(int x, char* s) {
  22.         int z = x + 4;
  23.         while (niz[z].getStatus() != 0 && z != x && strcmp(niz[z].getKey(), s) != 0)  {
  24.             z = z + 4;
  25.         }
  26.         if (z == x)
  27.             return -1;
  28.         return z;
  29.     }
  30.  
  31.     int h(char* x) {
  32.         if (niz[f(x)].getStatus() == 0 || strcmp(niz[f(x)].getKey(), x) == 0 ){
  33.             return f(x);
  34.         }
  35.         if (g(f(x), x) < 0) {
  36.             return -1;
  37.         }
  38.         return g(f(x), x);
  39.     }
  40.  
  41. public:
  42.     HashTable() {
  43.         length = 150;
  44.         count = 0;
  45.         niz = new HashObject[length];
  46.     }
  47.  
  48.     int getLength() {
  49.         return length;
  50.     }
  51.  
  52.     int getLoadFactor() {
  53.         return count / length;
  54.     }
  55.  
  56.     void add(char* s) {
  57.         if (h(s) > 0) {
  58.             niz[h(s)].changeValue(s);
  59.             count++;
  60.         }
  61.         else cout << "Sva mesta zauzeta\n";
  62.     }
  63.  
  64.     void del(char* s) {
  65.         if (count == 0) {
  66.             cout << "Tablica je prazna";
  67.             return;
  68.         }
  69.         int x = h(s);
  70.         if (x < 0)
  71.             cout << "Taj el. ne postoji";
  72.         niz[x].brisi();
  73.         count--;
  74.     }
  75.  
  76.     void stampaj() {
  77.         for (int i = 0; i < length; i++) {
  78.             if (niz[i].getStatus() == 1) cout << niz[i] << " mesto:" << i << endl;
  79.         }
  80.     }
  81.     ~HashTable() {
  82.         if (niz)
  83.             delete[] niz;
  84.     }
  85. };
  86.  
  87. //HashObject
  88. #ifdef _MSC_VER
  89. #define _CRT_SECURE_NO_WARNINGS
  90. #endif
  91.  
  92. #pragma once
  93. #include <iostream>
  94. using namespace std;
  95.  
  96. class HashObject {
  97. public:
  98.     char* key;
  99.     int record;
  100.     int status;
  101.  
  102. public:
  103.     HashObject() {
  104.         key = 0;
  105.         record = -1;
  106.         status = 0;
  107.     }
  108.  
  109.     HashObject(char* s) {
  110.         strcpy(key, s);
  111.         cout << "Unesite record:\n";
  112.         cin >> record;
  113.         status = 1;
  114.     }
  115.     HashObject(char* s1, int x) {
  116.         strcpy(key, s1);
  117.         record = x;
  118.         status = 1;
  119.     }
  120.  
  121.     void changeValue(char* s) {
  122.         if (key != 0)
  123.             delete[] key;
  124.         key = new char[strlen(s) + 1];
  125.         strcpy(key, s);
  126.         cout << "Unesite record:\n";
  127.         cin >> record;
  128.         status = 1;
  129.     }
  130.  
  131.     char* getKey() {
  132.         if (key != 0)
  133.             return key;
  134.         else
  135.             return " ";
  136.     }
  137.     int getRecord() {
  138.         return record;
  139.     }
  140.  
  141.     int getStatus() {
  142.         return status;
  143.     }
  144.  
  145.     void brisi() {
  146.         delete[] key;
  147.         key = 0;
  148.         record = -1;
  149.         status = -1;
  150.     }
  151.  
  152.     friend ostream& operator<<(ostream& str, HashObject& h) {
  153.         str << h.getKey() << "\t" << h.getRecord();
  154.         return str;
  155.     }
  156. };
  157.  
  158. // mejn
  159. #pragma once
  160. #include "HashTable.h"
  161.  
  162. void main() {
  163.     HashTable tabla;
  164.     tabla.add("public");
  165.     tabla.add("protected");
  166.     tabla.add("const");
  167.     tabla.add("concept");
  168.     tabla.add("pc");
  169.     tabla.stampaj();
  170.     cout << endl;
  171.     tabla.del("pc");
  172.     tabla.stampaj();
  173.     cout << endl;
  174.     tabla.del("const");
  175.     tabla.stampaj();
  176.     cout << endl;
  177.     tabla.del("concept");
  178.     tabla.stampaj();
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement