Подсчитайте количество элементов в стеке на C

#arrays #c #stack #counting

#массивы #c #стек #подсчет

Вопрос:

Я попытался использовать цикл for, чтобы получить общее число. Он работает вполне нормально, но это только в первом выводе. Из моего приведенного ниже кода, если опция 4 является вашей инструкцией, вы получите правильный ответ в первом выводе, но при повторном нажатии на опцию 4 она продолжает увеличиваться. Мой актуальный вопрос заключается в том, как сохранить первый вывод из цикла.

     #include<stdio.h>
    int top=-1,m=0;
    int A[200],k,n,a,i;
    void push(){
            if(top>=n-1)
            {
                 printf("ntSTACK is FULL!!n");  
             }
            else
            {
                printf("Enter the value to be pushed:");
                scanf("%d",amp;a);
                top  ;
                A[top]=a;
            }
    }
    void pop(){
        if(top<=-1)
        {
               printf("nt Stack is EMPTY!!n");
        }
        else
        {
               printf("nt The popped elements is %dn",A[top]);
               top--;
        }
    }

    int main()
    {
        printf("***********n");
        printf("Set the size of your stack(max 200).n");
        scanf("%d",amp;n);
        printf("You've set the size of the Stack to %dn", n);
        printf("nt ........................n");
        printf("nt 1- Push into the stack.n");
        printf("nt 2- Pop the stack.n");
        printf("nt 3- Display the elements in the stack.n");
        printf("nt 4- Get the number of elements in the stack.n");
        printf("nt 5- EXIT.n");
        printf("nt ........................n");
        printf("n");
        do{
            printf("Enter your instruction: ");
            scanf("%d",amp;k);
            
            switch(k){
                case 1:
                    push();
                    printf("n");
                    break;
                case 2:
                    pop();
                    printf("n");
                    break;
                case 3:
                    if(top>=0){
                        printf("nt Your Stack n");
                        for(i=top;i>=0;i--){
                            printf("nt %dn",A[i]);
                        }
                        printf("n");
                    }
                    else{
                        printf("Stack is EMPTY!!");
                    }
                    break;
                case 4:
                    for(i=0;i<=top;i  ){
                        if(A[i] != top)
                        m  ;
                    }
                    printf("%d",m);
                    printf("n");
                    break;
                case 5:
                    printf("nt EXITTED...");
                    break;
                default:
                    printf("nt Not in the above instruction.nn");
            }
        }
        while(k!=5);
        return 0;
    }
  

Комментарии:

1. "Set the size of your stack(max 200).n" почему вы не проверяете пользовательский ввод?

2. m ; Просто инициализируйте m 0 каждый раз перед for циклом.

3. Чтобы подсчитать количество элементов в стеке в данный момент времени, разве вы не можете просто отобразить top 1

Ответ №1:

Чтобы отобразить количество элементов в данный момент времени, просто отобразите значение top 1 .

 #include<stdio.h>
    int top=-1;
    int A[200],k,n,a,i;
    void push(){
            if(top>=n-1)
            {
                 printf("ntSTACK is FULL!!n");  
             }
            else
            {
                printf("Enter the value to be pushed:");
                scanf("%d",amp;a);
                top  ;
                A[top]=a;
            }
    }
    void pop(){
        if(top<=-1)
        {
               printf("nt Stack is EMPTY!!n");
        }
        else
        {
               printf("nt The popped elements is %dn",A[top]);
               top--;
        }
    }

    int main()
    {
        printf("***********n");
        printf("Set the size of your stack(max 200).n");
        scanf("%d",amp;n);
        printf("You've set the size of the Stack to %dn", n);
        printf("nt ........................n");
        printf("nt 1- Push into the stack.n");
        printf("nt 2- Pop the stack.n");
        printf("nt 3- Display the elements in the stack.n");
        printf("nt 4- Get the number of elements in the stack.n");
        printf("nt 5- EXIT.n");
        printf("nt ........................n");
        printf("n");
        do{
            printf("Enter your instruction: ");
            scanf("%d",amp;k);
            
            switch(k){
                case 1:
                    push();
                    printf("n");
                    break;
                case 2:
                    pop();
                    printf("n");
                    break;
                case 3:
                    if(top>=0){
                        printf("nt Your Stack n");
                        for(i=top;i>=0;i--){
                            printf("nt %dn",A[i]);
                        }
                        printf("n");
                    }
                    else{
                        printf("Stack is EMPTY!!");
                    }
                    break;
                case 4:
                    printf("%d",(top 1));
                    printf("n");
                    break;
                case 5:
                    printf("nt EXITTED...");
                    break;
                default:
                    printf("nt Not in the above instruction.nn");
            }
        }
        while(k!=5);
        return 0;
    }
  

Чтобы исправить ваш код:

 for(i=0,m=0;i<=top;i  )
{
   if(A[i] != top)
      m  ;
}