• 18、顺序栈


    Stack.h

    #ifndef STACK_H
    #define STACK_H
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    
    #define MAXSIZE 100
    #define OK 1
    #define ERROR 0
    #define TRUE 1
    #define FALSE 0
    
    typedef int SElemType;
    typedef int Status;
    
    typedef struct {
        SElemType data[MAXSIZE];
        int top;//栈顶指针
    }SqStack;
    
    //初始化操作,建立一个空栈
    void InitStack(SqStack *s);
    //将栈清空
    void ClearStack(SqStack *s);
    //若栈为空,返回TRUE,否则返回false
    Status IsEmpty(SqStack *s);
    //若栈存在且非空,用e返回S的栈顶元素
    void GetTop(SqStack s, SElemType *e);
    //插入元素e为新的栈顶元素
    Status Push(SqStack *s, SElemType e);
    //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
    Status Pop(SqStack *s, SElemType *e);
    //返回栈S的元素个数
    Status StackLength(SqStack s);
    
    //打印
    void PrintfStack(SqStack *s);
    
    #endif

    Stack.c

    #include"Stack.h"
    
    
    
    //初始化操作,建立一个空栈
    void InitStack(SqStack *s) {
        s->top = -1;
    }
    //将栈清空
    void ClearStack(SqStack *s) {
        if (s->top == -1) {
            return;
        }
        s->top = -1;
    }
    //若栈为空,返回TRUE,否则返回false
    Status IsEmpty(SqStack *s) {
        if (s->top == -1) {
            return TRUE;
        }
        return FALSE;
    }
    //若栈存在且非空,用e返回S的栈顶元素
    void GetTop(SqStack s, SElemType *e) {
        if (s.top == -1) {
            return ;
        }
        *e = s.data[s.top];
    }
    //进栈:插入元素e为新的栈顶元素
    Status Push(SqStack *s, SElemType e) {
        if (s->top == MAXSIZE - 1) {
            return ERROR;
        }
        if (e == NULL) {
            return ERROR;
        }
        s->top++;//栈顶指针加一
        s->data[s->top] = e; //将新插入元素赋值给栈顶空间
        return OK;         
    }
    //出栈:若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK,否则返回ERROR
    Status Pop(SqStack *s, SElemType *e) {
        if (IsEmpty(s)) {
            return ERROR;
        }
        *e = s->data[s->top];//将要删除的栈顶元素赋值给e
        s->top--;
        return OK;
    }
    //返回栈S的元素个数
    int StackLength(SqStack s) {
        int j = s.top+1;//栈从零开始,所以要加一
        return j;
    }
    
    //打印
    void PrintfStack(SqStack *s) {
        int i, k;
        k = s->top;
        for (i = 0; i < StackLength(*s); i++) {
            printf("%d ", s->data[k]);
            k--;
        }
        printf("
    ");
    }

    main.c

    /*
    栈:先进后出或后进先出    简称LIFO结构(last In first out)
    
    */
    
    
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include"Stack.h"
    
    
    
    int main()
    {
        SqStack a;
        SElemType e;
        int m[] = {13,24,45,46,68,78,98};
        int n = 7;
        //初始化
        InitStack(&a);
        //入栈
        for (int i = 0; i < n; i++) {
            Push(&a, m[i]);
        }
    
        //打印
        printf("栈的长度为:%d 
    ", StackLength(a));
        PrintfStack(&a);
    
        //出栈
        Pop(&a, &e);
        printf("栈的长度为:%d 
    ", a.top + 1);
        PrintfStack(&a);
        printf("出栈的值为:%d 
    ", e);
        //得到栈顶的值
        GetTop(a, &e);
        printf("栈顶的值为:%d 
    ", e);
        //将栈清空
        ClearStack(&a);
        PrintfStack(&a);//输出没有东西
    
        printf("%d 
    ", a.top);//top=-1,栈为空栈
    
        printf("
    ");
        system("pause");
        return 0;
    }

    VS2015运行结果:

  • 相关阅读:
    js--script和link中的 integrity 属性
    html之aria-hidden="true"
    S-HR之导入模板校验非当天变更限制
    拆分字符串
    S-HR之变动操作,变动原因,变动类型/离职操作,离职原因,离职类型
    mysql数学函数
    html页面引入
    springboot之server属性
    【开发工具】-Idea代码提示忽略大小写
    【个人提升】-怎样获得技术的成长(转)
  • 原文地址:https://www.cnblogs.com/luanxin/p/8995926.html
Copyright © 2020-2023  润新知