C++ :: Heap And Priority Queue (Array Not Storing Digit)
Feb 27, 2015
This assignment is about Heap and PQ's to sort out jobs inside a printer. I'm far from finishing the assignment but the most important part isn't working. My issue is that nothing is getting stored inside the array. I keep getting crashes and at this point I'm not sure what to do. I notice that my destructor runs right after my "addJob" Function finishes, which is destroying the memory. Which might be why nothing gets stored inside OR I think my implementation of Heap/PQ is wrong.
Functions inside my test.cpp aren't properly done, they are made just to see if something is stored inside.
1. Check if I created the array correctly [PQtype.cpp / Heap.h/ PQType.h]
2. Am I even using/storing into the array. [Test.cpp "addJob" Function]
3. I'm also new to working with Class Templates.
i am working on creating a priority queue, i seem to have done the algorithm for inserting from the top correctly but the algorithm for inserting from the bottom doesnt seem to work it just overwrites the existing data.
below is my code :
list is an array and listlength is the size of the array declared as a integer
void inserttop(string task) { //int head = 0 ; string temp ; listlength++ ; for (int i = 1; i < listlength; i++) {
I'm trying to use a priority queue sorting in reverse order to take a vector or 2d array. The problem is that I want to sort by the vector/array cell value but keep the reference to the vector/array index of the value. I don't know quite howto keep them both related so when I pop. I can find the corresponding cell.
How to build a FiFO queue without using the STL (done that no problem), get it to dequeue (again, done that no problem). However, to get those extra marks, I need to be able to order it using a priority system.
I've tried ordering the NodeDequeue class that I'll show at the bottom of this post, but I just cannot get it to order appropriately. The closest I have got is everything in order but I lose a Node from the memory completely. So, that's no good.
The most logical idea I have thought of right now is to send the largest number to the back of the queue each time it's iterated, eventually, the largest number will end up at the front.
class PriorityQueue : public Queue { public: Node* NodeDequeue(void) { Node* tmp = front; Node* seek = tmp->getPrev();
I'm trying to implement Prim's Algorithm and for that I need to have a decreaseKey method for a priority queue (to update the key value in a priority queue). Can I implement this in the STL Priority Queue?
This is the algorithm I'm following:
for each vertex u in graph G set key of u to INFINITY set parent of u to NIL set key of source vertex to 0 en-queue to priority queue Q all vertices in graph
I've got a priority queue of items who, from time to time, returns a different comparison result. Any way to re-sort a priority queue who is storing them?
write a program, pfpq.c, that maintains a priority queue of music tracks (songs) and ratings. The struct is given by:
Code:
struct track { char artist[20]; char title[20]; int rating; };
The program is only designed to demonstrate the concept so get the user to enter a small number of tracks and create a priority queue. (Use an empty string title or an empty string artist to end the program). Print the priority queue as it grows. Your program should initially ask the user if they wish to order the priority queue by rating in ascending order, or by rating in descending order, or if they wish to order the priority queue by artist name. Then build the priority queue accordingly. in the last case, "if they wish to order the priority queue by artist name." which is case 3. How do I sort the priority queue by artist name using in the following code.
So i have been banging my head against a wall with this problem for awhile. I have also copy and pasted direct examples from the internet but nothing seems to sort it right.
Node Header
Code: #ifndef _NODE_H #define _NODE_H #include <stdio.h> class Node { public: Node(); Node(int weight, char value, Node* left = NULL, Node* right = NULL);
On several occasions in my project, I need to sort elements (indeces) based on their linked values. Those values are stored in an array. This means the comparison looks like this:
bool operator()(int i, int j) { return someArray[i] > someArray[j]; }
Because this form returns often but someArray may differ, I wrapped this in a template class:
Now, I want to use this in a different way: I want to select the K indeces with the lowest value from someArray attached to it. My idea was to build a priority_queue, push the first K elements and then compare all the next elements to PQ.top(), as such:
INDEX t(0); for (; t < someLimit; ++t) { pq.push(t); if (pq.size() == K) break; } for (; t < someLimit; ++t) { if (someArray[t] < someArray[pq.top()]) { pq.pop(); pq.push(t); } }
My problem, however, is the definition / initialization of the priority_queue object. My first idea was simply std::priority_queue<INDEX> pq(sorter<VALUE>(someArray));, but calling any function on pq provides the error "expression must have class type" (?) when hovering over pq.
My second guess, std::priority_queue<INDEX, std::vector<INDEX>, sorter<VALUE>(someArray)> pq;, provides the error 'expected a ')'' when hovering over someArray.
What is the correct way to initialize this data structure?
There appears to be some kind of error in by removeMin() function. Inserting items seems to work just fine but attempting to remove any items gives me the error "vector subscript out of range".
Here is my SortedPQ class... Below it you will find the quicksort implementation, in case looking at it is necessary.
template <class Type> class SortedPQ { private: int front; int rear; vector<Type> V; public: SortedPQ(void) : front(-1), rear(-1), V(0){}
I wanted to find all the prime until a specified limit in C. I use the Sieve of Eratosthenes. But when I define the limit to anything more than a 7 digit number the program terminates.
Code:
#include<stdio.h> #define limit 1000000000 int main(void) { unsigned long long int i,j; int primes[limit] = {0}; //int count =0; for(i=2;i<limit;i++) }
[code]....
I believe that this might be because the size cannot be declared array cannot be more than the a 7 digit number. I think so. how to store a 10 digit number in C?And can't unsigned long long hold a 10 digit?
So I have to ask the user to enter a positive 12 digit number, and it has to be 12 digits exactly. I thought I'd do
Code:
unsigned long long int x; do{...} while(!(x>99999999999 && x<1000000000000));
This would obviously be fine on my 64 bit machine, but the code will be ran on a 32 bit one, where unsigned long long is, if I'm not mistaken, 32 bits. Which has a max value of 4 billion and something.
If I have an array, and want to make a heap tree out of it using make heap and sort heap, how would I do it? I'm struggling because I didn't take any course in data structure.
I tried googling stuff and I got to the following:
I am creating a class that has a private array on the heap with a constructor that takes the size of the array and initializes it on the heap. Later I have to make a deconstructor delete the space and print out free after.In my code, I was able to heap a private array and make a deconstructor, but I don't know how to take the size of the array and initialize it on the heap. My guess is this:
int* size = new int();
Also when you initialize size on the heap, don't you also have to delete it too? If so, where, in the code, do you do that? Here is my code so far.
Class Student { private: int size; int* array = new int[size]; public: Student(); // Constructor ~Student(); // Deconstructor
[code]....
How do you make a constructor that takes the size of the array and initializes it on the heap
I have a paradigm in a loop of queues of a vector,if a condition is true,increase sizes of the queue of that particular queue in the loop of queues, if condition is false, the queuesize is left as such in loop of queues. After this operation i need to search the queue sizes of all queues and enqueue in the shortest queue.
Write a function which will take 3 arguments. The function needs to return a new number which is formed by replacing the digit on a given position in the number with a digit which is carried as an argument (the position in the number is counted from right to left, starting with one). Write a main program which will print the newly formed number.
Examples: A function call of 2376, 3 and 5 should return the number 2576 A function call of 123456, 4 and 9 should return the number 129456
What I succeeded to do so far: Figure out the logic for swapping the digit and write working code for it (in the main function).
What I failed to do so far: Write a function which will return the desired result.
What is my problem: I tried writing a function to do this, but as you see from my calculations, my result is divided in 3 parts. I don't know how to return more variables from a function.
Code:
#include <stdio.h> int main() { int inputNumber, swapPosition, swapDigit; scanf("%d%d%d", &inputNumber, &swapPosition, &swapDigit); int i, numberPart1 = inputNumber; for (i = 1; i <= swapPosition; i++)
I am trying to redefine an array, but the result can only display one digit variable. I want the program to display 97 98 99 *+, but the program is only displaying 789*+.
int main() { string test="abc*+"; for(int i=0; i<test.size;i++)
With out sorting and if the array size is changed and filled with different elements, mayb some that are all duplicates(in that case display message that says "No nonrepeated digits".
This seemed like a simple task but im failing to grasp some concept. if the array is 2,0,38,2,3,1,3 the first non repeated is 0. nested loop is how i went. i feel like im going to far with the counters than need be. just need first non repeated. if n equals 2 an o equals 0. and it iterates comparing 0,38,2,3,1,3 to n which is 2. repCount will b 1. if repcount was 0 then n would be the first non repeated number. im trying to consolidate my if else statements so there are not so many. This program fails if the array gets bigger say 2,45,2,7,1,8,9,45,1,10 .....
for (n=0; n<sizeof(digits)/sizeof(int); n++) { if(repCount<2) { // nonRepCount=0; for (o=n+1; o<sizeof(digits)/sizeof(int); o++)
/* Implementation of a circular queue of Array containg names.. */ # include <stdio.h> # include <conio.h> # include <stdlib.h> # include <string.h> # define QSIZE 5 typedef struct{
[Code] ....
I changed my code. but whenever i typed in the ILoveBacolod it takes it as a whole, and if i deleted it deletes the string not the letter. for example:
Enter String: ILoveBacolod Enter a command: Delete (D) Output: LoveBacolod Enter a command: Delete (D) Output: oveBacolod Enter a command: Add (A) Enter a character: z Output: oveBacolodz
#include <iostream> #include<fstream> int decryption(int); int multiply(int,int[][2]); using namespace std; main(){ int n; ifstream inFile; inFile.open ("out.txt");
[Code] .....
I was trying to store numbers read from a text file into 2D array but I am getting the error above.here is where the error occurs: