在C中完成堆栈实现

时间:2017-11-12 16:26:13

标签: c struct stack

我被要求做一个堆栈实现。我需要以下功能;

  1. 流行音乐
  2. isFull
  3. 的isEmpty
  4. 偷看
  5. 显示整个数组
  6. 这就是我写的。

    df1 = df.groupby(df.index // 3).agg(['mean','std'])
    df1.columns = df1.columns.map('_'.join)
    print (df1)
    
        A_mean     A_std    B_mean     B_std    C_mean     C_std
    0  0.666667  1.154701  1.333333  1.154701  3.000000  1.000000
    1  2.000000  2.000000  2.333333  1.527525  1.000000  1.732051
    2  2.333333  1.154701  2.666667  1.527525  3.333333  1.154701
    3  4.000000       NaN  3.000000       NaN  3.000000       NaN
    

    0错误,显示11个警告。

    但是当我运行程序时,它会在询问选择后结束。

    输出:

    #include <stdio.h>
    #include <stdlib.h>
    #define SIZE 5
    
    /* Stack Structure  */
    struct stack
    {
        int s[SIZE];
        int top;
    }st;
    
    int main()
    {
    
    int option;
    
    printf("+-------------------------------------+\n");
    printf("1.Push\n2.Pop\n3.Check whether the stack is full\n4.Check whether the stack is empty\n5.Check the Top Element\n6.Display the Stack\n7.Exit\n");
    printf("+-------------------------------------+\n");
    printf("Enter Choice:\t");
    scanf("%d", &option);
    
    while(option == -99)
    {
        switch(option)
        {
        case 1:
            push();
            break;
        case 2:
            pop();
            break;
        case 3:
            isFull();
            break;
        case 4:
            isEmpty();
            break;
        case 5:
            peek();
            break;
        case 6:
            display();
            break;
        case 7:
            printf("You Exited from the program");
            break;
        }
    }
    return 0;
    }
    
    /*Function to add an element to the stack*/
    void push ()
    {
    int num;
    if (st.top == (SIZE - 1))
    {
        printf ("Stack is Full\n");
    }
    else
    {
        printf ("Enter the element to be pushed\n");
        scanf ("%d", &num);
        st.top ++;
        st.s[st.top] = num;
    }
    }
    
    /*Function to delete an element to the stack*/
    int pop()
    {
    int num;
    if (st.top == -1)
    {
        printf ("Stack is Empty\n");
        return st.top;
    }
    else
    {
        num = st.s[st.top];
        printf ("Popped element is = %d", st.s[st.top]);
        st.top --;
    }
    return (num);
    }
    
    /*Function to Check whether the stack is full*/
     void isFull()
     {
    
       if(st.top == SIZE - 1)
      printf("Stack is Full");
       else
      printf("Stack has %d elements", st.top - 1);
    }
    
    /*Function to Check whether the stack is Empty*/
    void isEmpty()
    {
    if(st.top == -1)
      printf("Stack is Empty");
    else
      printf("Stack has %d elements", st.top - 1);
    }
    
    /* Function to display the top element*/
    void peek()
    {
    printf("Top most element: \t%d", st.s[st.top]);
    }
    
    /* Function to display the stack*/
    void display ()
    {
    int i;
    if (st.top == -1)
    {
        printf ("Stack is empty\n");
    }
    else
    {
        printf ("\n The status of the stack is \n");
        for (i = st.top; i >= 0; i--)
        {
            printf ("%d\n", st.s[i]);
        }
    }
    printf ("\n");
    }
    

    我真的需要完成它。这是我的任务之一。请帮助我,非常感谢你的时间。 : - )

2 个答案:

答案 0 :(得分:1)

您正在退出,因为您输入的选项介于1到7之间,但您的while循环正在检查-99。因此,跳过while循环并退出。

我猜你真正想要做的是继续提示用户进行操作,直到他们退出。尝试考虑你真正想要在你的程序中使用的功能。

另外,不要害怕在代码中放置print语句并逐行跟踪流程。这对调试很有帮助。

祝你好运!

答案 1 :(得分:0)

当然,当您选择号码时,流程会停止工作。程序有效,而变量 选项 等于-99,这种情况从未发生过,因为您的选择总是在数字1-7之间。

可以通过编写 选项&gt; = 1&amp;&amp; while循环中的选项&lt; = 7