How would you design a stack which, in addition to push and pop, also has a function min which returns the minimum element? Push,pop and min should all operate in O(1) time.
File:StackBox.java
---------------------------------------------------------------------------------------------------
package org.developersbrain.solutions;
class Student{
String studentName;
int totalMarks;
String grade;
Student(String studentName,int totalMarks,String grade){
this.studentName = studentName;
this.totalMarks = totalMarks;
this.grade = grade;
}
public int hashCode(){
return totalMarks;
}
public String toString(){
System.out.println("Student Name :"+this.studentName);
System.out.println("Total Marks :"+this.totalMarks);
System.out.println("Grade :"+this.grade);
System.out.println();
System.out.println("-------------------------------------------");
return "";
}
}
class StackNode<ELEMENT>{
StackNode<ELEMENT> next;
ELEMENT e;
ELEMENT min;
StackNode(ELEMENT e){
this.e = e;
next = null;
}
}
public class StackBox<ELEMENT> {
StackNode<ELEMENT> top;
StackBox(){
top=null;
}
void push(ELEMENT e){
StackNode<ELEMENT> snode=new StackNode<ELEMENT>(e);
if(top==null){
top = snode;
top.min=top.e;
}else{
if(snode.e.hashCode()<top.min.hashCode()){
snode.min=snode.e;
}else{
snode.min=top.min;
}
snode.next =top;
top=snode;
}
}
void pop(){
StackNode<ELEMENT> pNode=top;
if(pNode==null){
System.out.println("Stack Empty!");
}else{
System.out.println(pNode.e.toString());
top=top.next;
}
}
void min(){
System.out.println(top.min.toString());
}
void printStack(){
StackNode<ELEMENT> pNode=top;
while(pNode!=null){
pNode.e.toString();
pNode=pNode.next;
}
}
}
---------------------------------------------------------------------------------------------------
package org.developersbrain.solutions;
class Student{
String studentName;
int totalMarks;
String grade;
Student(String studentName,int totalMarks,String grade){
this.studentName = studentName;
this.totalMarks = totalMarks;
this.grade = grade;
}
public int hashCode(){
return totalMarks;
}
public String toString(){
System.out.println("Student Name :"+this.studentName);
System.out.println("Total Marks :"+this.totalMarks);
System.out.println("Grade :"+this.grade);
System.out.println();
System.out.println("-------------------------------------------");
return "";
}
}
class StackNode<ELEMENT>{
StackNode<ELEMENT> next;
ELEMENT e;
ELEMENT min;
StackNode(ELEMENT e){
this.e = e;
next = null;
}
}
public class StackBox<ELEMENT> {
StackNode<ELEMENT> top;
StackBox(){
top=null;
}
void push(ELEMENT e){
StackNode<ELEMENT> snode=new StackNode<ELEMENT>(e);
if(top==null){
top = snode;
top.min=top.e;
}else{
if(snode.e.hashCode()<top.min.hashCode()){
snode.min=snode.e;
}else{
snode.min=top.min;
}
snode.next =top;
top=snode;
}
}
void pop(){
StackNode<ELEMENT> pNode=top;
if(pNode==null){
System.out.println("Stack Empty!");
}else{
System.out.println(pNode.e.toString());
top=top.next;
}
}
void min(){
System.out.println(top.min.toString());
}
void printStack(){
StackNode<ELEMENT> pNode=top;
while(pNode!=null){
pNode.e.toString();
pNode=pNode.next;
}
}
}
File:MainClass.java
-----------------------------------------------------------------------------------------
package org.developersbrain.solutions;
import java.io.IOException;
public class MainClass {
public static void main(String[] args) throws IOException{
StackBox<Student> sb=new StackBox<Student>();
sb.push(new Student("Student1",400,"B"));
sb.push(new Student("Student2",450,"A"));
sb.push(new Student("Student3",420,"B"));
sb.push(new Student("Student4",440,"B"));
sb.push(new Student("Student5",460,"A"));
System.out.println("Print Stack elements");
System.out.println("---------------------------------------------");
sb.printStack();
System.out.println();
System.out.println("Student Who scored the least score");
System.out.println("---------------------------------------------");
sb.min();
}
}
Program Output:
------------------------------------------------------------------------------------------------
Print Stack elements
---------------------------------------------
Student Name :Student5
Total Marks :460
Grade :A
-------------------------------------------
Student Name :Student4
Total Marks :440
Grade :B
-------------------------------------------
Student Name :Student3
Total Marks :420
Grade :B
-------------------------------------------
Student Name :Student2
Total Marks :450
Grade :A
-------------------------------------------
Student Name :Student1
Total Marks :400
Grade :B
-------------------------------------------
Student Who scored the least score
---------------------------------------------
Student Name :Student1
Total Marks :400
Grade :B
-------------------------------------------
Comments
Post a Comment