+ 1
operations on stack in c
I have written the following code to perform various operations on stack like pop,push etc. I have provided an option to reverse the stack using pop but it is not working due to some logical error. https://code.sololearn.com/cnMW7TP52O1T/?ref=app
15 Answers
+ 4
Works fine, if you used temporary like I said.
https://code.sololearn.com/cA0TmQLbEzjB
Note: function return is useless. setting the memory beyond the array to it's current contains does nothing.
+ 7
harshit static vs non static globals won't make a difference for your program.
+ 3
Your biggest issue with reverse is modifying the stack while attempting to read it. Create an a[5] so you can pop into that and, once the stack is empty, push the values back on stack in reverse.
As a side note, main shouldn't know anything about the stack details. OOP principles should be maintained even though the languange doesn't support classes. Your stack data should be static data that only your stack functions touch.
harshit updated...
The stack shouldn't know about where the data pushed is coming from. main should read and then push.
+ 3
If you want to, you could also directly copy in x by swapping.
int z,c;
c=top1/2;
for(int i=0;i<=c;i++)
{
z=x[i];
x[i]=x[top1-i];
x[top1-i]=z;
}
+ 3
This is how I'd do it to just support integers. It could easily be updated to support any type by:
- providing size to the stack function,
- void* for data value in push function,
- pop function returns 0/-1 error code and is passed in a callback to copy data being popped, and
- peek & print are passed in a callback to display the data instead of doing it in the functions (null would be used for empty/done.)
https://code.sololearn.com/ccU219Rl1XfD
+ 3
Okay, I couldn't help myself... The stack now supports any type. I hard coded usage with both characters and integers.
https://code.sololearn.com/c8JqT3XI9l8b
+ 2
That's fine use the temporary array to hold the popped data and push it back on after you got it all off.
+ 2
It is being updated. I pushed 3 values prior to reverse and it counted down 1,0,-1 after set call.
+ 2
If x[0]=5,x[1]=6,x[2]=7, you change x[0] to 7. The 5 is lost as it is 7 already when popped.
+ 2
Thank you so much.
+ 1
In reverse I am returning value given by pop.So I can't return x[5].
The problem is that how can I keep track of value of top because the code involves lot of loops and complexity.
+ 1
John Wells sir, please take a look at my code.
+ 1
The problem is with the statement top1=set();
in reverse function.
It is not updating value of top1.
+ 1
John Wells sir,is it necessary in my code to declare t as static global variable or I can also declare it as only global variable because I am getting right answer from both.
https://code.sololearn.com/cbxCpcmvi7TE/?ref=app
0
But I need to use pop for reverse.