栈的基本操作

#include "stdio.h"
#include "stdlib.h"
int Max_SIZE=100;
typedef struct LinkStackNode
{
    int data;
    LinkStackNode *next;
}LinkStackNode;
typedef struct LinkStack
{
    LinkStackNode *top;
    int length;
}LinkStack;
LinkStack *initialize_stack()//链栈的初始化
{
    LinkStack *p = (LinkStack *) malloc(sizeof(LinkStack));
    p->length = 0;
    p->top = NULL;
    return p;
}
int Isempty(LinkStack *p)//判断栈是否为空
{
    if(p->length==0)
    {
        printf("栈为空\n");
        return 1;
    }
    else
    {
        printf("栈不为空\n");
        return 0;
    }
}
int Isenough(LinkStack *p)//判断栈满
{
    if(p->length==Max_SIZE) {
        printf("栈满\n");
        return 1;
    }
    else
    {
        printf("栈不为满\n");
        return 0;
    }
}
LinkStack* Clear_Stack(LinkStack *p)//栈的清空
{
    LinkStackNode *temp;
    while(p->top)
    {
        temp=p->top;
        p->top=p->top->next;
        p->length--;
        free(temp);
    }
    return p;
}
void Destory_stack(LinkStack *p)//栈的销毁
{
    LinkStack *ptr;
    ptr=Clear_Stack(p);
    free(ptr);
}
LinkStack *Push_LinkstackNode(LinkStack *p,int data)//入栈 每次返回栈的头部
{
    if(!p) exit(0);
    LinkStackNode *temp=(LinkStackNode *) malloc(sizeof(LinkStackNode));
    temp->data=data;
    temp->next=p->top;
    p->top=temp;
    p->length++;
}
void pop_LinkStack(LinkStack *p)//出栈 每次从头部出栈 返回出栈完后的头
{
    if(!p) exit(1);
    int data;
    LinkStackNode *temp=p->top;
    data=temp->data;
    printf("%d\n",data);
    p->top=temp->next;
    p->length--;
    free(temp);
}
void GEt_Top_stack(LinkStack *p)//得到栈顶元素
{
    if(!p) exit(0);
    int data;
    //data=p->top->data;
    LinkStackNode *temp=p->top;
    data=temp->data;
    printf("栈顶元素=%d\n",data);
}
void Traverse_Stack(LinkStack *p)//栈的遍历
{
    LinkStackNode *temp;
    while(p->top)
    {
        temp=p->top;
        int data=temp->data;
        p->top=p->top->next;
        printf("%d",data);
    }
    printf("\n");
}
void menu(LinkStack *p)
{
    int choice;
    while(1)
    {
        printf("请输入你想要选择的功能:\n");
        printf("1.入栈   2.出栈\n");
        printf("3.栈空判断 4.栈满判断\n");
        printf("5.获取栈顶元素   6.栈的遍历\n");
        printf("7.退出程序\n");
        printf("请输入你的选择:");
        scanf("%d",&choice);
        switch (choice) {
            case 1:
                int data;
                setbuf(stdin,NULL);
                printf("输入你想要录入的数据\n");
                scanf("%d",&data);
                Push_LinkstackNode(p,data);
                break;
            case 2:
                pop_LinkStack(p);
                break;
            case 3:
                Isempty(p);
                break;
            case 4:
                Isenough(p);
                break;
            case 5:
                GEt_Top_stack(p);
                break;
            case 6:
                Traverse_Stack(p);
                break;
            case 7:
                exit(0);
            default:
                break;
        }
    }

}
int main()
{
    LinkStack *Stack=initialize_stack();
    menu(Stack);
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值