• 纯C语言实现顺序栈


    #include <stdio.h>
    #include <stdlib.h>
    #define MAXSIZE 100
    
    typedef int SElemType;
    
    typedef struct {
        SElemType *base;
        SElemType *top;
        int stackSize;
    }SqStack;
    
    SqStack *InitStack(SqStack *S);//初始化
    SqStack *DestroyStack(SqStack*S);//销毁
    void ClearStack(SqStack*S);//清空
    int StackEmpty(SqStack*S);//判空
    int StackLength(SqStack*S);//栈长度
    SElemType GetTop(SqStack*S);//获取栈顶元素,不修改指针位置
    int Push(SqStack*S, SElemType e);//插入栈顶
    int Pop(SqStack *S, SElemType *e);//删除栈顶
    void StackTraverse(SqStack *S);//从栈顶依次遍历
    
    
    //初始化,返回指向栈的指针
    SqStack * InitStack(SqStack *S){
        S = (SqStack *)malloc(sizeof(SqStack));
        S->base = (SElemType *)malloc(sizeof(SElemType)*MAXSIZE);
        if(!S->base){
            printf("空间不足初始化失败
    ");
            return NULL;
        }
        S->top = S->base;
        S->stackSize = MAXSIZE;
        printf("初始化成功
    ");
        return S;
    }
    
    //销毁
    SqStack *DestroyStack(SqStack*S){
        free(S->base);
        free(S);
        printf("已销毁
    ");
        return NULL;
    }
    
    //清空
    void ClearStack(SqStack*S){
        printf("清空
    ");
        SElemType *p = S->top;
        while(p >= S->base){
            *p--=0;
        }
        printf("清空成功
    ");
    }
    
    //判空
    int StackEmpty(SqStack*S){
        return (S->base == S->top);
    }
    
    //返回栈长度
    int StackLength(SqStack*S){
        return S->top-S->base;
    }
    
    //获取栈顶元素,不修改指针位置
    SElemType GetTop(SqStack*S){
        if(S->top != S->base)
            return *(S->top - 1);
    }
    
    //插入栈顶,返回是否插入成功的状态
    int Push(SqStack*S, SElemType e){
        if(S->top - S->base == S->stackSize){
            printf("栈已满,插入失败
    ");
            return 0;
        }
        //先赋值后动指针
        *S->top++=e;
        printf("%d元素入栈成功
    ", e);
        return 1;
    }
    
    //删除栈顶,返回是否删除成功的状态
    int Pop(SqStack *S, SElemType *e){
        //栈空
        if(S->top == S->base){
            printf("空栈,删除失败
    ");
            return 0;
        }
        //先动指针后赋值
        *e = *--S->top;
        printf("%d出栈成功
    ", *e);
        return 1;
    }
    
    //从栈顶依次遍历
    void StackTraverse(SqStack *S){
        SElemType *p = S->top;
        while(p > S->base){
            p--;
            printf("%d ", *p);
        }
        printf("
    ");
    }
    
    
    
    int main()
    {
        SqStack *S = NULL;
        SElemType e;
    
        //初始化测试
        S = InitStack(S);
    
    //    //判空测试
    //    if(StackEmpty(S)) printf("空栈
    ");
    //
        //插入测试
        Push(S, 1);
        Push(S, 3);
        Push(S, 2);
        Push(S, 4);
        Push(S, 7);
    
    //    //遍历测试
    //    StackTraverse(S);
    //
    //    //出栈测试
    //    Pop(S, &e);
    ////    printf("测试e是否改变:%d
    ",e);
    //    StackTraverse(S);
    //
    //    //栈长测试
    //    printf("栈长%d
    ",StackLength(S));
    //
    //    //获取栈顶元素测试
    //    e = GetTop(S);
    //    printf("栈顶元素是%d
    ", e);
    //    StackTraverse(S);
    //
    //    //清空测试
    //    ClearStack(S);
    //    if(StackEmpty(S)) printf("空栈
    ");
    //    StackTraverse(S);
    
        //销毁测试
        S = DestroyStack(S);
        StackTraverse(S);
    
        return 0;
    }
    作者:PowerZZJ
    本博客文章大多为原创,转载请请在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    java中常量定义在interface中好还是定义在class中
    CharacterEncodingFilter-Spring字符编码过滤器
    Integer判断相等,到底该用==还是equals
    ThreadLocal实现session中用户信息 的线程间共享
    分布式部署引发的问题
    分布式部署
    LogBack通过MDC实现日志记录区分用户Session
    Fragment 简介 基础知识 总结 MD
    直播 相关技术文章 相关调研文章
    直播 背景 技术体系 乐视云直播Demo
  • 原文地址:https://www.cnblogs.com/powerzzjcode/p/10889108.html
Copyright © 2020-2023  润新知