• Nov 18, 2022 •AustinLeath
0 likes • 0 views
using namespace std; class Hash { int BUCKET; // No. of buckets // Pointer to an array containing buckets list<int> *table; public: Hash(int V); // Constructor // inserts a key into hash table void insertItem(int x); // deletes a key from hash table void deleteItem(int key); // hash function to map values to key int hashFunction(int x) { return (x % BUCKET); } void displayHash(); }; Hash::Hash(int b) { this->BUCKET = b; table = new list<int>[BUCKET]; } void Hash::insertItem(int key) { int index = hashFunction(key); table[index].push_back(key); } void Hash::deleteItem(int key) { // get the hash index of key int index = hashFunction(key); // find the key in (inex)th list list <int> :: iterator i; for (i = table[index].begin(); i != table[index].end(); i++) { if (*i == key) break; } // if key is found in hash table, remove it if (i != table[index].end()) table[index].erase(i); } // function to display hash table void Hash::displayHash() { for (int i = 0; i < BUCKET; i++) { cout << i; for (auto x : table[i]) cout << " --> " << x; cout << endl; } } // Driver program int main() { // array that contains keys to be mapped int a[] = {15, 11, 27, 8, 12}; int n = sizeof(a)/sizeof(a[0]); // insert the keys into the hash table Hash h(7); // 7 is count of buckets in // hash table for (int i = 0; i < n; i++) h.insertItem(a[i]); // delete 12 from hash table h.deleteItem(12); // display the Hash table h.displayHash(); return 0; }
• Jul 16, 2024 •LeifMessinger
0 likes • 14 views
//===============Header File================== #include <iostream> #include <sstream> //stringbuf #include <utility> //exchange //Couple rules: //Characters given through the getter functions have to be removed from the buffer. //This is so that bufferEmpty() == buffer.in_avail() > 0 basically always. //skipWhitespace doesn't remove the text from the buffer, but it does return the number of characters. //nextWord will trim whitespace before the word //nextInt will trim non-numbers before the number //hasNextInt and hasNextWord will trim the whitespace. If you think you need it, you should get nextWhitespace before doing any of those. //Whitespace after a word or an int is left on the buffer. //nextWhitespace will (get and) remove whitespace until the end of the line, including the newline character, but stops before the next line. //nextWhitespace won't read the next line when called before the end of the line, and it won't prompt the user for the next line if interactive. //If nextWhitespace is called after reading the end of the line, then it will read a new line into the buffer, which will prompt the user. //It acts like nextLine, but if there's something non-whitespace on the current line it stops there. class Scanner { public: std::stringbuf buffer; std::istream& input; Scanner(std::istream& in = std::cin) : buffer(), input(in) {} //Buffer debugging bool fillBuffer(); bool bufferEmpty(); void printBufferEmpty(); std::string getBuffer(); size_t bufferLength(); void printBufferStats(); //Int bool hasNextInt(); int nextInt(); //Word bool hasNextWord(); std::string nextWord(); //Line bool hasNextLine(); //Whitespace size_t skipWhitespace(); //Prob should be private, but I don't believe in that private shit. bool hasNextWhitespace(); std::string nextWhitespace(); std::string nextWhitespaceAll(); std::string nextLine(); }; //===============Source File================== bool Scanner::fillBuffer() { //Returns if it had to get the next line from the input. const bool badInput = input.eof() || input.bad(); const bool shouldFillBuffer = bufferEmpty() && !badInput; if (shouldFillBuffer) { std::string line; if (std::getline(input, line)) { buffer.str(buffer.str() + line + "\n"); } } return shouldFillBuffer; } bool Scanner::bufferEmpty(){ return buffer.str() == ""; } void Scanner::printBufferEmpty(){ std::cout << "The buffer is " << (bufferEmpty()? "" : "not") << " empty." << std::endl; } std::string Scanner::getBuffer(){ return buffer.str(); } size_t Scanner::bufferLength(){ return buffer.str().length(); } void Scanner::printBufferStats(){ if(bufferEmpty()){ std::cout << "The buffer is \"\"" << std::endl; return; } std::cout << "The length of the buffer is " << bufferLength() << std::endl; if(buffer.sgetc() == '\r'){ std::cout << "The buffer is \\r\\n" << std::endl; }else if(buffer.sgetc() == '\n'){ std::cout << "The buffer is \\n" << std::endl; } } bool Scanner::hasNextInt() { return hasNextWord() && (std::isdigit(buffer.sgetc()) || buffer.sgetc() == '-'); } int Scanner::nextInt() { if (!hasNextInt()) { //Will fill the buffer if not filled. Will also trim whitespace. return 0; } std::string num; size_t charactersRead = 0; while (buffer.in_avail() > 0 && (std::isdigit(buffer.sgetc()) || buffer.sgetc() == '-')) { num += buffer.sbumpc(); ++charactersRead; } buffer.str(buffer.str().erase(0, charactersRead)); return std::stoi(num); } bool Scanner::hasNextWord() { nextWhitespaceAll(); return buffer.in_avail() > 0; } std::string Scanner::nextWord() { if (!hasNextWord()) { //Will fill the buffer if not filled. Will also trim whitespace. return ""; } std::string word; size_t charactersRead = 0; while (buffer.in_avail() > 0 && !std::isspace(buffer.sgetc())) { word += buffer.sbumpc(); ++charactersRead; } buffer.str(buffer.str().erase(0, charactersRead)); return word; } bool Scanner::hasNextLine() { return (!bufferEmpty()) || fillBuffer(); } size_t Scanner::skipWhitespace() { //Returns characters read size_t charactersRead = 0; while (buffer.in_avail() > 0 && std::isspace(buffer.sgetc())) { buffer.sbumpc(); ++charactersRead; } return charactersRead; } bool Scanner::hasNextWhitespace(){ fillBuffer(); return buffer.in_avail() > 0 && std::isspace(buffer.sgetc()); } std::string Scanner::nextWhitespace() { if (!hasNextWhitespace()) { //Will fill the buffer if not filled return ""; } const size_t charactersRead = skipWhitespace(); std::string whitespace = buffer.str().substr(charactersRead); buffer.str(buffer.str().erase(0, charactersRead)); return whitespace; } std::string Scanner::nextWhitespaceAll(){ std::string whitespace; while(hasNextWhitespace()){ std::string gottenWhiteSpace = nextWhitespace(); whitespace += gottenWhiteSpace; } return whitespace; } std::string Scanner::nextLine(){ if (!hasNextLine()) { return ""; } fillBuffer(); //Swap out the old buffer with an empty buffer, and get the old buffer as a variable. std::string line = std::exchange(buffer, std::stringbuf()).str(); //Remove the newline. if(line[line.length() - 1] == '\n' || line[line.length() - 1] == '\r' ) line.pop_back(); if(line[line.length() - 1] == '\r' || line[line.length() - 1] == '\n' ) line.pop_back(); return line; } //=================Word and Int test================= while(bruh.hasNextInt() || bruh.hasNextWord()){ std::cout << "started loop" << std::endl; if(bruh.hasNextInt()){ std::cout << "Int: " << bruh.nextInt() << " " << std::endl; }else{ std::cout << "Word: " << bruh.nextWord() << " " << std::endl; } bruh.nextWhitespace(); } //===================Line test====================== for(int count = 1; bruh.hasNextLine(); ++count){ std::string line = bruh.nextLine(); std::cout << "Line " << count << ": " << line << std::endl; }
0 likes • 1 view
#include <string> #include <iostream> #include "PlaylistNode.h" using namespace std; PlaylistNode::PlaylistNode() { uniqueID = "none"; songName = "none"; artistName = "none"; songLength = 0; nextNodePtr = 0; } PlaylistNode::PlaylistNode(string uniqueID_, string songName_, string artistName_, int songLength_) { uniqueID = uniqueID_; songName = songName_; artistName = artistName_; songLength = songLength_; nextNodePtr = 0; } void PlaylistNode::InsertAfter(PlaylistNode* ptr) { this->SetNext(ptr->GetNext()); ptr->SetNext(this); } void PlaylistNode::SetNext(PlaylistNode* ptr) { nextNodePtr = ptr; } string PlaylistNode::GetID() { return uniqueID; } string PlaylistNode::GetSongName() { return songName; } string PlaylistNode::GetArtistName() { return artistName; } int PlaylistNode::GetSongLength() { return songLength; } PlaylistNode* PlaylistNode::GetNext() { return nextNodePtr; } void PlaylistNode::PrintPlaylistNode() { cout << "Unique ID: " << uniqueID << endl; cout << "Song Name: " << songName << endl; cout << "Artist Name: " << artistName << endl; cout << "Song Length (in seconds): " << songLength << endl; } Playlist::Playlist() { head = tail = 0; } void Playlist::AddSong(string id, string songname, string artistname, int length) { PlaylistNode* n = new PlaylistNode(id, songname, artistname, length); if (head == 0) { head = tail = n; } else { n->InsertAfter(tail); tail = n; } } bool Playlist::RemoveSong(string id) { if (head == NULL) { cout << "Playlist is empty" << endl; return false; } PlaylistNode* curr = head; PlaylistNode* prev = NULL; while (curr != NULL) { if (curr->GetID() == id) { break; } prev = curr; curr = curr->GetNext(); } if (curr == NULL) { cout << "\"" << curr->GetSongName() << "\" is not found" << endl; return false; } else { if (prev != NULL) { prev ->SetNext(curr->GetNext()); } else { head = curr->GetNext(); } if (tail == curr) { tail = prev; } cout << "\"" << curr->GetSongName() << "\" removed." << endl; delete curr; return true; } } bool Playlist::ChangePosition(int oldPos, int newPos) { if (head == NULL) { cout << "Playlist is empty" << endl; return false; } PlaylistNode* prev = NULL; PlaylistNode* curr = head; int pos; if (head == NULL || head == tail) { return false; } for (pos = 1; curr != NULL && pos < oldPos; pos++) { prev = curr; curr = curr->GetNext(); } if (curr != NULL) { string currentSong = curr->GetSongName(); if (prev == NULL) { head = curr->GetNext(); } else { prev->SetNext(curr->GetNext()); } if (curr == tail) { tail = prev; } PlaylistNode* curr1 = curr; prev = NULL; curr = head; for (pos = 1; curr != NULL && pos < newPos; pos++) { prev = curr; curr = curr->GetNext(); } if (prev == NULL) { curr1->SetNext(head); head = curr1; } else { curr1->InsertAfter(prev); } if (curr == NULL) { tail = curr1; } cout << "\"" << currentSong << "\" moved to position " << newPos << endl; return true; } else { cout << "Song's current position is invalid" << endl; return false; } } void Playlist::SongsByArtist(string artist) { if (head == NULL) { cout << "Playlist is empty" << endl; } else { PlaylistNode* curr = head; int i = 1; while (curr != NULL) { if (curr->GetArtistName() == artist) { cout << endl << i << "." << endl; curr->PrintPlaylistNode(); } curr = curr->GetNext(); i++; } } } int Playlist::TotalTime() { int total = 0; PlaylistNode* curr = head; while (curr != NULL) { total += curr->GetSongLength(); curr = curr->GetNext(); } return total; } void Playlist::PrintList() { if (head == NULL) { cout << "Playlist is empty" << endl; } else { PlaylistNode* curr = head; int i = 1; while (curr != NULL) { cout << endl << i++ << "." << endl; curr->PrintPlaylistNode(); curr = curr->GetNext(); } } }
• Jun 30, 2023 •Iceman_71
0 likes • 7 views
#include <iostream> using namespace std; int main() { int arr[] = {5, 1, 4, 20, 10, 2, 13, 11, 6, 21}; int greed[] = {0, 0, 0, 0}; int k = 0; int i; int set_index; while (k < 4) { i = 0; while (i < 10) { if (arr[i] > greed[k]) { greed[k] = arr[i]; set_index = i; } i++; } arr[set_index] = 0; k++; } cout << greed[0] << " " << greed[1] << " " << greed[2] << " " << greed[3] << endl; }
/* Algorithm: Step 1: Get radius of the cylinder from the user and store in variable r Step 2: Get height of the cylinder from the user and store in variable h Step 3: Multiply radius * radius * height * pi and store in v Step 4: Display the volume */ #include <iostream> using namespace std; int main() { float r; //define variable for radius float h; //define variable for height float v; float pi; pi=3.1416; cout<<"Enter radius:"; cin>>r; cout<<"Enter height:"; cin>>h; v=r*r*h*pi; //compute volume cout<<"Radius:"<<r<<"\tHeight:"<<h<<endl; //display radius and height cout<<"\n************************\n"; cout<<"Volume:"<<v<<endl;//display volume return 0; }
0 likes • 2 views
#include <iostream> #include "PlaylistNode.h" using namespace std; void PrintMenu(string title); int main() { string plTitle; cout << "Enter playlist's title:" << endl; getline(cin, plTitle); PrintMenu(plTitle); return 0; } void PrintMenu(string title) { Playlist list; string id; string sname; string aname; int length; int oldPos; int newPos; char choice; while(true) { cout << endl << title << " PLAYLIST MENU" << endl; cout << "a - Add song" << endl; cout << "d - Remove song" << endl; cout << "c - Change position of song" << endl; cout << "s - Output songs by specific artist" << endl; cout << "t - Output total time of playlist (in seconds)" << endl; cout << "o - Output full playlist" << endl; cout << "q - Quit" << endl << endl; cout << "Choose an option:" << endl; cin >> choice; cin.ignore(); if (choice == 'q') { exit(1); } else if (choice == 'a') { cout << "\nADD SONG" << endl; cout << "Enter song's unique ID: "; cin >> id; cin.ignore(); cout << "Enter song's name: "; getline(cin,sname); cout << "Enter artist's name: "; getline(cin,aname); cout << "Enter song's length (in seconds): "; cin >> length; list.AddSong(id, sname, aname, length); } else if (choice == 'd') { cout << "\nREMOVE SONG" << endl; cout << "Enter song's unique ID: "; cin >> id; list.RemoveSong(id); } else if (choice == 'c') { cout << "\nCHANGE POSITION OF SONG" << endl; cout << "Enter song's current position: "; cin >> oldPos; cout << "Enter new position for song: "; cin >> newPos; list.ChangePosition(oldPos, newPos); } else if (choice == 's') { cout << "\nOUTPUT SONGS BY SPECIFIC ARTIST" << endl; cout << "Enter artist's name: "; getline(cin, aname); list.SongsByArtist(aname); } else if (choice == 't') { cout << "\nOUTPUT TOTAL TIME OF PLAYLIST (IN SECONDS)" << endl; cout << "Total time: " << list.TotalTime() << " seconds" << endl; } else if (choice == 'o') { cout << endl << title << " - OUTPUT FULL PLAYLIST" << endl; list.PrintList(); } else { cout << "Invalid menu choice! Please try again." << endl; } } }