栈(例题详解,栈的思想,栈的基本功能)

#include<stdio.h>
#include<stdlib.h>
struct stack
{
        int buf[6];
        int top;//指向栈顶元素
};


short IsFull(struct stack* pa);
void initStack(struct stack* ps);
short push(struct stack* pa,int data);
short IsEmpty(struct stack* pa);
short pop(struct stack* p,int* data);
short stackLength(struct stack* p);
short ClearStack(struct stack* p);

//功能:初始化栈
void initStack(struct stack* ps)
{
        if(NULL!=ps)
        {
                (*ps).top=-1;
        }
}
//功能:进栈
short push(struct stack* pa,int data)
{
        if(1==IsFull(pa))//栈为满
                return 0;
        else//栈不为满
        {
                pa->buf[++pa->top]=data;
                return 1;//压栈成功
        }
}
//功能:判断栈是否为满
short IsFull(struct stack* pa)
{
        if(pa->top==5)
        {
                return 1;
        }
        else
                return 0;
}
//功能:判断是否为空
short IsEmpty(struct stack* pa)
{
        if(pa->top==-1)
                return 1;
        else
                return 0;
}
//功能:出栈
short pop(struct stack* p,int* data)
{
        if(IsEmpty(p)==1)//栈为空
                return 0;
        else//栈非空
        {
                *data=p->buf[p->top--];
                return 1;
        }
}
//次栈栈顶元素
short Secondary(struct stack* p,int *data)
{
        if(IsEmpty(p)==0)
        {
                *data=p->buf[(p->top)-1];
                return 1;
        }
        else
        {
                return 0;
        }
}
//功能:栈元素的个数:
short StackLength(struct stack* p)
{
        int num=p->top+1;
        return num;
}
//清空栈
short ClearStack(struct stack* p)
{
        p->top=-1;
}
void main()
{
//定义变量
        struct stack s;
        initStack(&s);
        int opt;
                printf("***功能按钮介绍***\n");
                printf("0-进栈\n");
                printf("1-出栈\n");
                printf("2-查看栈的元素个数\n");
                printf("3-判断栈是否为满\n");
                printf("4-判断栈是否为空\n");
                printf("5-清空栈\n");
                printf("6-次栈顶元素为:\n");
                printf("7-退出本程序\n");
        while(1)
        {
                printf("Please Input:");
                scanf("%d",&opt);
                switch(opt)
                {
                        case 0://进栈
                        {
                                int data;
                                printf("请输入值:");
                               scanf("%d",&data);
                                if(1==push(&s,data))
                                {
                                        printf("压栈成功\n");
                                        getchar();
                                }
                                else
                                        printf("压栈失败\n");
                        }break;
                        case 1://出栈
                        {
                                int a;
                                if(pop(&s,&a)==0)
                                        printf("栈为空,无法出栈!\n");
                                else
                                        printf("%d\n",a);
                        }break;
                        case 2://栈元素的个数
                        {
                                printf("当前栈元素个数为:%d\n",StackLength(&s));
                        }break;
                        case 3://判断栈是否为满
                        {
                                if(IsFull(&s)==5)
                                        printf("栈已满\n");
                                else
                                        printf("栈未满\n");
                        }break;
                        case 4://判断栈是否为空
                        {
                                if(IsEmpty(&s)==1)
                                        printf("空栈,无值\n");
                                else
                                        printf("栈有值\n");
                        }break;
                        case 5://清空栈
                        {
                                ClearStack(&s);
                                printf("栈已清空\n");
                        }break;
                        case 6:
                        {
                                int b=0;
                                if(Secondary(&s,&b)==1 && StackLength(&s)>1)
                                        printf("次栈顶元素为:%d\n",b);
                                else
                                        printf("栈中元素小于2个,没有次栈顶元素\n");
                        }break;
                        case 7:
                        {
                                printf("退出程序\n");
                                return;
                        }
                        default:
                                printf("系统错误");

                }


        }
}

猜你喜欢

转载自blog.csdn.net/cs13797778767/article/details/81222816