C语言中Stack的数组实现

时间:2014-10-10 16:40:45

标签: c arrays loops data-structures stack

    #include <stdio.h>

#define MAXSIZE 101

int A[MAXSIZE];
int top=-1;
    int data;
void push()
{

    printf("Enter a number\n");
    scanf(" %d",&data);

    if (top==MAXSIZE-1){
        printf("Overflow.Array size limit reached\n");
        return;
    }
    A[++top]=data;
}

void pop()
{
    if(top==-1){
        printf("Empty Stack!\n");
        return;
    }
    top--;
}

int isEmpty()
{
    if(top==-1)
    {
        printf("Empty yes\n");
        return 0;
    }

}

int first()
{
    return A[top];
}

int printStack()
{
    int i=0;
    for(i=0;i<=top;i++)
    {
        printf("%d \n",A[i] );
    }
    return 0;
}


int main(int argc, char const *argv[])
{
    int choice;
    int flag=1;

    do{
        printf("The options are\n");
        printf("1\t\t Push\n2\t\t Pop\n3\t\t Empty\n4\t\t Top\n5\t\t Print\n\n");

        scanf(" Enter choice %d",&choice);
        switch(choice)
    {
        case 1:
            push();
            break;
        case 2:
            pop();
            break;
        case 3:
            isEmpty();
            break;
        case 4:
            first();
            break;
        case 5:
            printStack();
            break;
        default:
            printf("Please enter correct menu choice");

    }

    printf("Wanna repeat again ? Press 1 to repeat 0 to exit\n");
    scanf("%d",&flag);


    }while(flag);

    return 0;
}

我尝试使用数组创建Stack的实现。我在循环中遇到了一些问题。该程序运行,它要求选择,并从开关案例驱动菜单,它应该去该功能,执行它并回到main()

但是有一些问题,它再次启动循环而不执行任何功能

3 个答案:

答案 0 :(得分:0)

将您的scanf语句更改为:

printf("Enter your choice :");
scanf("%d", &choice);

答案 1 :(得分:0)

scanf(" Enter choice %d",&choice);

不是编写scanf()函数的有效方法。要在屏幕上显示消息,我们puts()printf()scanf()仅用于获取输入。这里解释了异常行为:

scanf() reference

要执行向屏幕显示消息然后从用户那里获取输入的任务,请将语句重写为:

printf("Enter your choice ");
scanf("%d", &choice);

答案 2 :(得分:0)

通过将堆栈实现为数据结构来理解它更容易。通过创建堆栈结构,您可以轻松创建多个堆栈。

struct stack {
    int data[MAX];    //define max
    int top;    //top of stack
} s1,s2,s3;     //create multiple stack variables