杂谈

栈示例程序,包含栈的基本功能:进栈,出栈,显示栈顶元素,输出所有栈元素

#include<stdio.h>
#include<stdlib.h>

#define MAXLEN 100

typedef int datatype;
typedef struct{
    datatype data[MAXLEN];
    int top;
}stack;//栈结构体 

//初始化栈 
void init_stack(stack *s)
{
    s->top = -1;//top为-1表示栈空 
}

//判断栈是否为空 
//空返回1,否则0 
int empty_stack(stack *s)
{
    if(s->top == -1)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//判断栈是否为满
//满返回1,否则0 
int full_stack(stack *s)
{
    if(s->top == MAXLEN-1) 
    {
        return 1;
    }
    else
    {
        return 0;
    }
}

//进栈 
//成功返回1,否则0 
int push(stack *s, datatype x)
{
    if(full_stack(s))
    {
        printf("栈满!\n");
        return 0;
    }
    else
    {
        s->top++;
        s->data[s->top] = x;
        return 1;
    }
}


//出栈 
//成功返回1,否则0 
int pop(stack *s, datatype *x)
{
    if(empty_stack(s))
    {
        printf("栈空!\n");
        return 0;
    }
    else
    {
        *x = s->data[s->top];
        s->top--;
        return 1;
    }
}

//取栈顶元素 
int get_top(stack *s, datatype *x)
{
    if(empty_stack(s))
    {
        printf("栈空!\n");
        return 0;
    }
    else
    {
        *x = s->data[s->top];
        return 1;
    }
}

//输出栈 
void output(stack s)
{
    for(int i = 0; i <= s.top; i++)
    {
        printf("%d\t",s.data[i]);
    }
    printf("\n输出完成\n");
}

int main()
{
    stack a;
    init_stack(&a);
    int tmp = 0;
    printf("1.进栈\n"
           "2.出栈\n"
           "3.显示栈顶元素\n"
           "4.输出栈\n");
    char b;
    while(1)
    {
        scanf("%c",&b);
        switch(b)
        {
            case '1':
                printf("\n输入需要插入的数字\n");
                scanf("%d",&tmp); 
                if(push(&a,tmp))
                {
                    printf("操作成功\n");
                }
                break;
            case '2':
                if(pop(&a,&tmp))
                {
                    printf("数字%d从栈中移除\n",tmp);
                    printf("操作成功\n");
                }
                break;
            case '3':
                if(get_top(&a,&tmp))
                {
                    printf("栈顶元素为%d\n",tmp);
                    printf("操作成功\n");
                }
                break;
            case '4':
                output(a);
                break;
        }
    }
}

点击下载源文件

This is just a placeholder img.