0

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()か?ありがとう。

4

3 に答える 3

3

show関数の問題の1つは、すべてのデータをポップアウトしようとしていることです。top--show関数でを実行するべきではありません。

于 2013-01-23T07:21:33.527 に答える
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;
}
于 2013-01-23T07:24:28.273 に答える
0

//Cを使用してスタック操作を実行するWAP-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);

    }
于 2016-10-06T05:17:26.317 に答える