Stack Array implementation of Java
up vote
1
down vote
favorite
This is my array implementation on stack in Java. It involves push, pop, get and growth when limit of array size is reached.
I am a self-taught programmer starting to learn data structures and algorithms.
I am looking for
- any recommendation on conventions
- an honest opinion on how bad this piece of code if this is an interview.
- anything wrong and room for improvement.
I wrote this code myself, not looking at any other similar questions on Code Review.
public class stackAlist{
int data;
int size;
static int growthmultipler = 1;
public stackAlist(){
data = new int[2*growthmultipler];
size = 0;
}
public void push(int value){
if(this.size == 0){
this.data[0] = value;
this.size += 1;
this.growthmultipler = 1;
}
else if(this.size == 2*growthmultipler){
growthmultipler += 1;
stackAlist newlist = new stackAlist();
newlist.data = new int[2*growthmultipler];
System.arraycopy(this.data, 0, newlist.data, 0, this.size);
this.data = newlist.data;
this.data[size] = value;
this.size += 1;
}
else{
this.data[size] = value;
this.size += 1;
}
}
public void pop(){
this.data[size-1] = 0;
this.size = this.size-1;
}
public void get(){
int i;
for(i =0; i < this.size; i++){
System.out.println(data[i]);
}
}
public static void main(String args){
stackAlist a = new stackAlist();
a.push(1);
a.push(2);
a.get();
a.pop();
a.get();
a.push(3);
a.push(4);
a.get();
}
}
java algorithm stack
New contributor
add a comment |
up vote
1
down vote
favorite
This is my array implementation on stack in Java. It involves push, pop, get and growth when limit of array size is reached.
I am a self-taught programmer starting to learn data structures and algorithms.
I am looking for
- any recommendation on conventions
- an honest opinion on how bad this piece of code if this is an interview.
- anything wrong and room for improvement.
I wrote this code myself, not looking at any other similar questions on Code Review.
public class stackAlist{
int data;
int size;
static int growthmultipler = 1;
public stackAlist(){
data = new int[2*growthmultipler];
size = 0;
}
public void push(int value){
if(this.size == 0){
this.data[0] = value;
this.size += 1;
this.growthmultipler = 1;
}
else if(this.size == 2*growthmultipler){
growthmultipler += 1;
stackAlist newlist = new stackAlist();
newlist.data = new int[2*growthmultipler];
System.arraycopy(this.data, 0, newlist.data, 0, this.size);
this.data = newlist.data;
this.data[size] = value;
this.size += 1;
}
else{
this.data[size] = value;
this.size += 1;
}
}
public void pop(){
this.data[size-1] = 0;
this.size = this.size-1;
}
public void get(){
int i;
for(i =0; i < this.size; i++){
System.out.println(data[i]);
}
}
public static void main(String args){
stackAlist a = new stackAlist();
a.push(1);
a.push(2);
a.get();
a.pop();
a.get();
a.push(3);
a.push(4);
a.get();
}
}
java algorithm stack
New contributor
add a comment |
up vote
1
down vote
favorite
up vote
1
down vote
favorite
This is my array implementation on stack in Java. It involves push, pop, get and growth when limit of array size is reached.
I am a self-taught programmer starting to learn data structures and algorithms.
I am looking for
- any recommendation on conventions
- an honest opinion on how bad this piece of code if this is an interview.
- anything wrong and room for improvement.
I wrote this code myself, not looking at any other similar questions on Code Review.
public class stackAlist{
int data;
int size;
static int growthmultipler = 1;
public stackAlist(){
data = new int[2*growthmultipler];
size = 0;
}
public void push(int value){
if(this.size == 0){
this.data[0] = value;
this.size += 1;
this.growthmultipler = 1;
}
else if(this.size == 2*growthmultipler){
growthmultipler += 1;
stackAlist newlist = new stackAlist();
newlist.data = new int[2*growthmultipler];
System.arraycopy(this.data, 0, newlist.data, 0, this.size);
this.data = newlist.data;
this.data[size] = value;
this.size += 1;
}
else{
this.data[size] = value;
this.size += 1;
}
}
public void pop(){
this.data[size-1] = 0;
this.size = this.size-1;
}
public void get(){
int i;
for(i =0; i < this.size; i++){
System.out.println(data[i]);
}
}
public static void main(String args){
stackAlist a = new stackAlist();
a.push(1);
a.push(2);
a.get();
a.pop();
a.get();
a.push(3);
a.push(4);
a.get();
}
}
java algorithm stack
New contributor
This is my array implementation on stack in Java. It involves push, pop, get and growth when limit of array size is reached.
I am a self-taught programmer starting to learn data structures and algorithms.
I am looking for
- any recommendation on conventions
- an honest opinion on how bad this piece of code if this is an interview.
- anything wrong and room for improvement.
I wrote this code myself, not looking at any other similar questions on Code Review.
public class stackAlist{
int data;
int size;
static int growthmultipler = 1;
public stackAlist(){
data = new int[2*growthmultipler];
size = 0;
}
public void push(int value){
if(this.size == 0){
this.data[0] = value;
this.size += 1;
this.growthmultipler = 1;
}
else if(this.size == 2*growthmultipler){
growthmultipler += 1;
stackAlist newlist = new stackAlist();
newlist.data = new int[2*growthmultipler];
System.arraycopy(this.data, 0, newlist.data, 0, this.size);
this.data = newlist.data;
this.data[size] = value;
this.size += 1;
}
else{
this.data[size] = value;
this.size += 1;
}
}
public void pop(){
this.data[size-1] = 0;
this.size = this.size-1;
}
public void get(){
int i;
for(i =0; i < this.size; i++){
System.out.println(data[i]);
}
}
public static void main(String args){
stackAlist a = new stackAlist();
a.push(1);
a.push(2);
a.get();
a.pop();
a.get();
a.push(3);
a.push(4);
a.get();
}
}
java algorithm stack
java algorithm stack
New contributor
New contributor
edited 2 days ago
Toby Speight
22.2k536108
22.2k536108
New contributor
asked 2 days ago
Carch
82
82
New contributor
New contributor
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
0
down vote
accepted
First of all, you are using a static variable (growthmultipler) inside the instance of a class. This is fatal if you have more than one instance of this class. Because you always use 2*growthmultipler, you don't need it. Use +=2 instead.
You don't need to prealloc data in the constructor. It will be done if it's needed.
You don't need to handle "size == 0" separately. You only have to handle "size >= length".
You don't have to create a new class if you want to grow data.
In pop() you should test to not get negative (and throw an exception). And normally a pop function returns the value.
In summary it might look like this:
public class stackAlist{
int data;
int size;
public stackAlist(){
size = 0;
data = new int[size];
}
public void push(int value){
if(size>=data.length) {
int ndata = new int[data.length+2];
System.arraycopy(data, 0, ndata, 0, size);
data = ndata;
}
data[size] = value;
size += 1;
}
public int pop() {
int ret=0;
if(size>0) {
size -= 1;
ret = data[size];
data[size] = 0;
}
return ret;
}
.....
Exceptions exist for a reason; the use of a "special" return value should be well documented.
– Solomon Ucko
2 days ago
I do think it should fail early, though.
– Solomon Ucko
2 days ago
add a comment |
up vote
0
down vote
A couple things to add:
- Classes should use CamelCase and should preferably have descriptive names.
stackAlist
would be better namedArrayStack
. - You might want to have a
Stack
interface thatArrayStack
implements. - You might want to extract the resizing code into a separate method, and optionally make it public and/or take parameters.
- In your pop method, there's no need to zero out the popped items.
Thank you for all answers. I am kind of stuck at thinking about why I need a Stack interface that ArrayStack implements. Because I don't know why, I can't think of how to do it. An Interface should be used when there are multiple classes/data types involved. Are you saying that I should makeArrayStack
generic so that it can accept all data types? Kinda confused here, please help, thanks.
– Carch
yesterday
Generics might be good too. Also, having an interface isn't necessary, but it can allow you to decouple it from code that uses it.
– Solomon Ucko
yesterday
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
0
down vote
accepted
First of all, you are using a static variable (growthmultipler) inside the instance of a class. This is fatal if you have more than one instance of this class. Because you always use 2*growthmultipler, you don't need it. Use +=2 instead.
You don't need to prealloc data in the constructor. It will be done if it's needed.
You don't need to handle "size == 0" separately. You only have to handle "size >= length".
You don't have to create a new class if you want to grow data.
In pop() you should test to not get negative (and throw an exception). And normally a pop function returns the value.
In summary it might look like this:
public class stackAlist{
int data;
int size;
public stackAlist(){
size = 0;
data = new int[size];
}
public void push(int value){
if(size>=data.length) {
int ndata = new int[data.length+2];
System.arraycopy(data, 0, ndata, 0, size);
data = ndata;
}
data[size] = value;
size += 1;
}
public int pop() {
int ret=0;
if(size>0) {
size -= 1;
ret = data[size];
data[size] = 0;
}
return ret;
}
.....
Exceptions exist for a reason; the use of a "special" return value should be well documented.
– Solomon Ucko
2 days ago
I do think it should fail early, though.
– Solomon Ucko
2 days ago
add a comment |
up vote
0
down vote
accepted
First of all, you are using a static variable (growthmultipler) inside the instance of a class. This is fatal if you have more than one instance of this class. Because you always use 2*growthmultipler, you don't need it. Use +=2 instead.
You don't need to prealloc data in the constructor. It will be done if it's needed.
You don't need to handle "size == 0" separately. You only have to handle "size >= length".
You don't have to create a new class if you want to grow data.
In pop() you should test to not get negative (and throw an exception). And normally a pop function returns the value.
In summary it might look like this:
public class stackAlist{
int data;
int size;
public stackAlist(){
size = 0;
data = new int[size];
}
public void push(int value){
if(size>=data.length) {
int ndata = new int[data.length+2];
System.arraycopy(data, 0, ndata, 0, size);
data = ndata;
}
data[size] = value;
size += 1;
}
public int pop() {
int ret=0;
if(size>0) {
size -= 1;
ret = data[size];
data[size] = 0;
}
return ret;
}
.....
Exceptions exist for a reason; the use of a "special" return value should be well documented.
– Solomon Ucko
2 days ago
I do think it should fail early, though.
– Solomon Ucko
2 days ago
add a comment |
up vote
0
down vote
accepted
up vote
0
down vote
accepted
First of all, you are using a static variable (growthmultipler) inside the instance of a class. This is fatal if you have more than one instance of this class. Because you always use 2*growthmultipler, you don't need it. Use +=2 instead.
You don't need to prealloc data in the constructor. It will be done if it's needed.
You don't need to handle "size == 0" separately. You only have to handle "size >= length".
You don't have to create a new class if you want to grow data.
In pop() you should test to not get negative (and throw an exception). And normally a pop function returns the value.
In summary it might look like this:
public class stackAlist{
int data;
int size;
public stackAlist(){
size = 0;
data = new int[size];
}
public void push(int value){
if(size>=data.length) {
int ndata = new int[data.length+2];
System.arraycopy(data, 0, ndata, 0, size);
data = ndata;
}
data[size] = value;
size += 1;
}
public int pop() {
int ret=0;
if(size>0) {
size -= 1;
ret = data[size];
data[size] = 0;
}
return ret;
}
.....
First of all, you are using a static variable (growthmultipler) inside the instance of a class. This is fatal if you have more than one instance of this class. Because you always use 2*growthmultipler, you don't need it. Use +=2 instead.
You don't need to prealloc data in the constructor. It will be done if it's needed.
You don't need to handle "size == 0" separately. You only have to handle "size >= length".
You don't have to create a new class if you want to grow data.
In pop() you should test to not get negative (and throw an exception). And normally a pop function returns the value.
In summary it might look like this:
public class stackAlist{
int data;
int size;
public stackAlist(){
size = 0;
data = new int[size];
}
public void push(int value){
if(size>=data.length) {
int ndata = new int[data.length+2];
System.arraycopy(data, 0, ndata, 0, size);
data = ndata;
}
data[size] = value;
size += 1;
}
public int pop() {
int ret=0;
if(size>0) {
size -= 1;
ret = data[size];
data[size] = 0;
}
return ret;
}
.....
edited 2 days ago
answered 2 days ago
Holger
1513
1513
Exceptions exist for a reason; the use of a "special" return value should be well documented.
– Solomon Ucko
2 days ago
I do think it should fail early, though.
– Solomon Ucko
2 days ago
add a comment |
Exceptions exist for a reason; the use of a "special" return value should be well documented.
– Solomon Ucko
2 days ago
I do think it should fail early, though.
– Solomon Ucko
2 days ago
Exceptions exist for a reason; the use of a "special" return value should be well documented.
– Solomon Ucko
2 days ago
Exceptions exist for a reason; the use of a "special" return value should be well documented.
– Solomon Ucko
2 days ago
I do think it should fail early, though.
– Solomon Ucko
2 days ago
I do think it should fail early, though.
– Solomon Ucko
2 days ago
add a comment |
up vote
0
down vote
A couple things to add:
- Classes should use CamelCase and should preferably have descriptive names.
stackAlist
would be better namedArrayStack
. - You might want to have a
Stack
interface thatArrayStack
implements. - You might want to extract the resizing code into a separate method, and optionally make it public and/or take parameters.
- In your pop method, there's no need to zero out the popped items.
Thank you for all answers. I am kind of stuck at thinking about why I need a Stack interface that ArrayStack implements. Because I don't know why, I can't think of how to do it. An Interface should be used when there are multiple classes/data types involved. Are you saying that I should makeArrayStack
generic so that it can accept all data types? Kinda confused here, please help, thanks.
– Carch
yesterday
Generics might be good too. Also, having an interface isn't necessary, but it can allow you to decouple it from code that uses it.
– Solomon Ucko
yesterday
add a comment |
up vote
0
down vote
A couple things to add:
- Classes should use CamelCase and should preferably have descriptive names.
stackAlist
would be better namedArrayStack
. - You might want to have a
Stack
interface thatArrayStack
implements. - You might want to extract the resizing code into a separate method, and optionally make it public and/or take parameters.
- In your pop method, there's no need to zero out the popped items.
Thank you for all answers. I am kind of stuck at thinking about why I need a Stack interface that ArrayStack implements. Because I don't know why, I can't think of how to do it. An Interface should be used when there are multiple classes/data types involved. Are you saying that I should makeArrayStack
generic so that it can accept all data types? Kinda confused here, please help, thanks.
– Carch
yesterday
Generics might be good too. Also, having an interface isn't necessary, but it can allow you to decouple it from code that uses it.
– Solomon Ucko
yesterday
add a comment |
up vote
0
down vote
up vote
0
down vote
A couple things to add:
- Classes should use CamelCase and should preferably have descriptive names.
stackAlist
would be better namedArrayStack
. - You might want to have a
Stack
interface thatArrayStack
implements. - You might want to extract the resizing code into a separate method, and optionally make it public and/or take parameters.
- In your pop method, there's no need to zero out the popped items.
A couple things to add:
- Classes should use CamelCase and should preferably have descriptive names.
stackAlist
would be better namedArrayStack
. - You might want to have a
Stack
interface thatArrayStack
implements. - You might want to extract the resizing code into a separate method, and optionally make it public and/or take parameters.
- In your pop method, there's no need to zero out the popped items.
answered 2 days ago
Solomon Ucko
924313
924313
Thank you for all answers. I am kind of stuck at thinking about why I need a Stack interface that ArrayStack implements. Because I don't know why, I can't think of how to do it. An Interface should be used when there are multiple classes/data types involved. Are you saying that I should makeArrayStack
generic so that it can accept all data types? Kinda confused here, please help, thanks.
– Carch
yesterday
Generics might be good too. Also, having an interface isn't necessary, but it can allow you to decouple it from code that uses it.
– Solomon Ucko
yesterday
add a comment |
Thank you for all answers. I am kind of stuck at thinking about why I need a Stack interface that ArrayStack implements. Because I don't know why, I can't think of how to do it. An Interface should be used when there are multiple classes/data types involved. Are you saying that I should makeArrayStack
generic so that it can accept all data types? Kinda confused here, please help, thanks.
– Carch
yesterday
Generics might be good too. Also, having an interface isn't necessary, but it can allow you to decouple it from code that uses it.
– Solomon Ucko
yesterday
Thank you for all answers. I am kind of stuck at thinking about why I need a Stack interface that ArrayStack implements. Because I don't know why, I can't think of how to do it. An Interface should be used when there are multiple classes/data types involved. Are you saying that I should make
ArrayStack
generic so that it can accept all data types? Kinda confused here, please help, thanks.– Carch
yesterday
Thank you for all answers. I am kind of stuck at thinking about why I need a Stack interface that ArrayStack implements. Because I don't know why, I can't think of how to do it. An Interface should be used when there are multiple classes/data types involved. Are you saying that I should make
ArrayStack
generic so that it can accept all data types? Kinda confused here, please help, thanks.– Carch
yesterday
Generics might be good too. Also, having an interface isn't necessary, but it can allow you to decouple it from code that uses it.
– Solomon Ucko
yesterday
Generics might be good too. Also, having an interface isn't necessary, but it can allow you to decouple it from code that uses it.
– Solomon Ucko
yesterday
add a comment |
Carch is a new contributor. Be nice, and check out our Code of Conduct.
Carch is a new contributor. Be nice, and check out our Code of Conduct.
Carch is a new contributor. Be nice, and check out our Code of Conduct.
Carch is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f207968%2fstack-array-implementation-of-java%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown