zoukankan      html  css  js  c++  java
  • 链式栈-C语言实现

    相对于顺序栈的空间有限,链式栈的操作则更加灵活

    #include<stdio.h>
    #include<malloc.h>
    typedef int SElemType;                    //元素类型
    typedef int Status;                        //返回值类型
    #define OK 1                            //操作成功
    #define ERROR 0                            //操作失败
    
    typedef struct StackNode                //链栈结点结构体
    {
        SElemType date;                        //节点数据
        struct StackNode *next;                //节点指针
    }*LinkStackPtr;                            //结点名
    
    typedef struct LinkStack                //链栈结构体
    {
        LinkStackPtr top;                    //栈顶指针
        int count;                            //栈结点数量
    }LinkStack;                                //栈名
    
    /*链栈的入栈操作*/
    Status Push(LinkStack *S, SElemType e)
    {
        LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));        //申请新结点
        s->date = e;                            //新结点的数据等于e
        s->next = S->top;                        //新结点的下一结点等于现在的栈顶结点
        S->top = s;                                //栈顶结点等于新结点
        S->count++;                                //栈中数据加1
        return OK;
    }
    
    /*链栈的出栈操作*/
    Status Pop(LinkStack *S, SElemType *e)
    {
        if(S->count == 0)                //判断栈是否为空
            return ERROR;
        LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));        //申请新结点
        s = S->top;                        //新结点等于当前栈顶结点
        *e = s->date;                    //e等于栈顶结点的数据
        S->top = s->next;                //栈顶等于新结点的下一结点
        free(s);                        //释放新结点
        S->count--;                        //栈中数据减1
        return OK;
    }
    
    void main()
    {
        LinkStack S;            //创建栈L
        S.count = 0;            //栈顶指针为-1,栈为空
        int e;                //入栈与出栈的元素
    
        while(true)
        {
            printf("请选择对链栈的操作:
    ");
            printf("1.入栈
    ");
            printf("2.出栈
    ");
            printf("3.退出
    ");
            int a;
            scanf("%d", &a);
            switch(a)
            {
                case 1:
                    printf("请输入入栈的元素:");
                    scanf("%d", &e);
                    if(Push(&S, e))
                        printf("入栈成功
    ");
                    else
                        printf("入栈失败
    ");
                    break;
                case 2:
                    if(Pop(&S, &e))
                        printf("出栈的元素为:%d
    ",e);
                    else
                        printf("栈空
    ");
                    break;
                case 3:
                    return;
                default:
                    printf("选择错误
    ");
                    break;
            }
        }
    }
  • 相关阅读:
    网址
    asp.net 各种路径查找
    jquery.nicescroll.js 滚动条插件 API
    课程表上一周下一周
    上一周下一周
    使用NPOI导入导出标准Excel
    FTP文件操作 上传文、 下载文件、删除文件 、创建目录
    asp.net断点续传
    11.06第九次作业
    11.20dezuoye
  • 原文地址:https://www.cnblogs.com/yurui/p/9527048.html
Copyright © 2011-2022 走看看