C++ interview Questions (1)
C++ interview Questions (2)
C++ interview questions (3)
C++ interview questions(4)
26.Describe hash table and one simple rehashing policy.
A hash table or hash map is a data structure that uses a hash function to map identifying values, known as keys (e.g., a person's name), to their associated values (e.g., their telephone number)
The implementation of this calculation is the hash function f:
index = f(key, arrayLength)The hash function calculates an index within the array from the data key. arrayLength is the size of the array.
The simplest rehashing policy is linear probing. Suppose a key K hashes to location i. Suppose other key occupies H[i]. The following function is used to generate alternative locations:
rehash(j) = (j + 1) mod n
where j is the location most recently probed and n the size of the hash table. Initially j = i, the hash code for K. Notice that this version of rehash does not depend on K.
Linear probing is a scheme in for resolving hash collisions of values of hash functions by sequentially searching the hash table for a free location.[1]
newLocation = (startingValue + stepSize) % arraySize
The first source code is an implementation of a Hash Map with open addressing (linear probing) as collision resolution method.
// hashMapLinear[] is the hash map void linearProbingInsert(int value){ int probe = hash(value); while (hashMapLinear[probe]!=0){ probe = fmod((probe+1),SIZE_HASH_MAP); } hashMapLinear[probe] = value; } int linearProbingSearch(int value){ int probe = hash(value); int i; for(i=0;i<size_hash_map ;i++){ if(hashMapLinear[probe]==value) return TRUE; probe = fmod((probe+1),SIZE_HASH_MAP); } return FALSE; }
27. Describe Stacks and name a couple of places where stacks are useful.
A stack is a last in, first out (LIFO) abstract data type and data structure. A stack can have any abstract data type as an element, but is characterized by only two fundamental operations: push and pop. Many virtual machines are also stack-oriented, including the p-code machine and the Java Virtual Machine.
Below is example to to use stacks to check an input file for parentheses matches.
Algorithm: Read from input file, process on character, push , i.e ++ptr if "(", pop, i.e. --ptr if ")", the parentheses missing when ptr < 0
--------------------------------------------------------------------
#include <fstream.h>
#include <stdlib.h> // for exit(..)
#include <stdio.h>
#include "stack.h"
int main()
{
char c;
int k;
ifstream f;
f.open( "input.txt" );
if( ! f ){
cout << "Error opening file. Quitting.\n";
exit(-1);
}
//initialize
stk_init();
c = getchar();
putchar(c);
// loop through file one char at a time
while (c!=EOF)
{
// process one character
// push (, pop if ),
// check stack empty if \n,
// ignore others
// if error, move to next line
if (c == '(')
{
stk_push(c);
}
else if (c == ')')
{
if (c !== '\n')
stk_pop(c);
else if (c == '(')
stk_push (c);
// pop stack, if empty have missing (
}
else if (c == '\n')
{
// check on missing )
// set up for next line
stk_init();
}
if (stk_error()) //skip rest of line
else // get next char
{
}
} // endwhile
return 0;
}
stach.h as below:#define STK_ERROR '?'
/* Private data: */
#define MAX 50
static int error; /* error flag */
static char data[MAX]; /* the stack */
static int ptr; /* stack pointer */
/* Function implementation */
void stk_init() {
ptr = 0;
error = 0;
}
void stk_push(char x) {
if (ptr < MAX) {
data[ptr++] = x;
error = 0;
}
else
error = 1;
}
char stk_pop(void) {
if (ptr > 0) {
int x = data[--ptr];
error = 0;
return x;
} else {
error = 1;
return STK_ERROR;
}
}
char stk_top(void) {
if (ptr > 0) {
error = 0;
return data[ptr-1];
} else {
error = 1;
return STK_ERROR;
}
}
int stk_size(void) {
return ptr;
}
int stk_error(void) {
return error;
}
Hi, Peter:
ReplyDeleteThanks!