我正在尝试使用C中的数组执行堆栈上的所有操作(推送,弹出,窥视,更新,显示)。当我在调用所有函数后最后调用show()
时工作正常我需要的。但是,无论何时我在任何操作之前调用show()
,都不会给我相应的结果。
我正在使用以下代码:
int main()
{
push(1);
push(2);
push(3);
push(4);
push(6);
pop();
push(5);
show();//line 8
//push(7);//line 9
//pop();
//peep();
//update();
//show();//line 13
return;
}
void push(int num){//insert an item
if(top==MAXSIZE-1)
{
printf("Overflow condition");
return;
}
top++;
stack[top]=num;
//return;
}
void pop()//delete a item from top
{
int num;
if(top==-1)
{
printf("Underflow condition");
return;
}
num=stack[top];
top--;
//return;
}
void show()//display elements
{
if(top==-1){
printf("Underflow");
return;
}
while(top!=-1){
printf("%d\n",stack[top--]);
}
//return;
}
void peep()//extract information
{
int loc,num;
printf("enter location:\n");
scanf("%d",&loc);
if(top-loc+1 < 0)
{
printf("No item at the given location\n");
return;
}
else{
num=stack[top-loc+1];
printf("\nItem at location %d is %d",loc,num);
}
}
void update(){//update information
int loc,item;
printf("enter new item:");
scanf("%d",&item);
printf("enter location:");
scanf("%d",&loc);
if(top-loc+1 < 0)
{
printf("No item at the given location\n");
return;
}
else{
stack[top-loc+1]=item;
printf("\nItem inserted");
}
}
在调用show()
之后,top将在第8行指向-1(空),因此之后的结果将是:
push()
将插入位置1而不是顶部。pop()
将显示下溢情况。peep()
如果有条件,则会更新。 那么在调用show()
之后,如何将堆栈顶部设置为堆栈中的顶部元素?
感谢。
答案 0 :(得分:3)
show函数的一个问题是,它还试图弹出所有数据。您不应该在show函数中执行top--
。
答案 1 :(得分:3)
您的show()
方法会修改top
指针,这是错误的:
void show()//display elements
{
if(top==-1){
printf("Underflow");
return;
}
while(top!=-1){
printf("%d\n",stack[top--]); // <--- here 'top--' will modify the top pointer
}
//return;
}
您可以像这样更改show()
方法:
void show()//display elements
{
if(top==-1){
printf("Underflow");
return;
}
int i = top; // introducing a new variable to iterate through the stack
while(i!=-1){
printf("%d\n",stack[i--]); // now 'i' is modified
}
//return;
}
答案 2 :(得分:0)
// WAP使用C语言执行堆栈操作 1.推,2.pop,3.peep,4.change,5.top-of-stack,6.is-empty,7.is-full,8.display
#include<stdlib.h>
#include<stdio.h>
#define max_size 5
int stack[max_size],top=-1,i,x;
/*------ Function Prototype------------*/
void push();
void pop();
void peep();
void display();
void top_stack();
void change();
void is_empty();
/*-------------------------------------*/
int main()
{
int choice;
do{
printf("\n\n--------STACK OPERATIONS-----------\n");
printf("1.Push\n");
printf("2.Pop\n");
printf("3.Peep\n");
printf("4.Display\n");
printf("5.Change\n");
printf("6.TOP\n");
printf("7.exit\n");
printf("-----------------------");
printf("\nEnter your choice:\t");
scanf("%d",&choice);
switch(choice)
{
case 1: push();
break;
case 2: pop();
break;
case 3: peep();
break;
case 4: display();
break;
case 5: change();
break;
case 6: top_stack();
break;
case 7: exit(0);
break;
default: printf("\nInvalid choice:\n");
break;
}
}while(choice!=7);
return 0;
}
void push() //Inserting element in to the stack
{
int item;
if(top==(max_size-1))
{
printf("\nStack Overflow:");
}
else
{
printf("Enter the element to be inserted:\t");
scanf("%d",&item);
top=top+1;
stack[top]=item;
}
}
void pop() //deleting an element from the stack
{
int item;
if(top==-1)
{
printf("Stack Underflow:");
}
else
{
item=stack[top];
top=top-1;
printf("\nThe poped element: %d\t",item);
}
}
void peep()
{
printf("enter the i th element");
scanf("%d",&i);
if(top-i+1<0)
{
printf("\nStack is empty:");
}
else
{
printf("The topmost element of the stack is %d",stack[top-i+1]);
}
}
void display()
{
int i;
if(top==-1)
{
printf("\nStack is Empty:");
}
else
{
printf("\nThe stack elements are:\n" );
for(i=top;i>=0;i--)
{
printf("%d\n",stack[i]);
}
}
}
void change()
{
printf("enter the i th element");
scanf("%d",&i);
if(top-i+1<0)
{
printf("\nStack is empty:");
}
else
{
printf("enter the element to be changed\n");
scanf("%d",&x);
stack[top-i+1]=x ;
printf("The topmost element of the stack is %d",stack[top-i+1]);
}
}
void top_stack()
{
int t;
t=stack[top];
printf("The Topmost element of stack is =%d",t);
}