• c语言实现数组栈


      已经十一点,这是今天的第三篇博客了,为什么今天要写这么多呢。因为这些代码是之前写好的,写起来比较快。当然不是这个原因,真正的原因是下午玩了一下午游戏,好累,想睡觉,躺在床上看了一篇不知哪年毕业的学长讲他面试的经历的博客。我被刺激到了。呵呵。。。

      对于栈的性质和定义我就不多说了。之前利用栈写过表达式计算器,有兴趣的同学可以试试。递归与栈的联系很密切,应该说递归就是靠栈来实现的。

    astack.h

    #ifndef _STACK_H
    #define _STACK_H
    
    #define MAXSIZE 10
    
    typedef struct stack
    {
        int * arr;//循环队列首地址
        int size;//大小
    } Stack;
    
    void s_init(Stack * stack);//初始化
    int s_size(Stack * stack);//栈大小
    void s_push(Stack * stack, const int data);//入栈
    void s_pop(Stack * stack);//出栈
    int s_top(Stack * stack);//栈顶
    bool s_empty(Stack * stack);//为空
    bool s_full(Stack * stack);//为满
    void s_destroy(Stack * stack);//销毁
    
    #endif //_STACK_H

    astack.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <assert.h>
    
    #include "astack.h"
    
    void s_init(Stack * stack)
    {
        stack->arr = (int *)malloc( sizeof(int) * MAXSIZE );//创建一个循环队列的数组
        stack->size = 0;//初始化大小为0
    }
    
    int s_size(Stack * stack)
    {
        assert(stack->size > 0);
        return stack->size;//返回元素个数
    }
    
    void s_push(Stack * stack, const int data)
    {
        if ( s_full(stack) )//当队列为满时,不能进行入栈操作
            return;
        stack->arr[stack->size] = data;//栈顶指针=size-1,而要添加的位置是 栈顶指针+1,也就是size
        stack->size++;
    }
    
    void s_pop(Stack * stack)
    {
        if ( s_empty(stack) )//当队为空时,不能进行出队操作
            return;
        stack->size--;//出队只需将栈顶指针-1,也就是size-1
    }
    
    int s_top(Stack * stack)
    {
        assert(stack->size > 0 );
        return stack->arr[stack->size - 1];//size-1才是栈顶元素
    }
    
    bool s_empty(Stack * stack)
    {
        return stack->size == 0;
    }
    
    bool s_full(Stack * stack)
    {
        return stack->size == MAXSIZE;
    }
    
    void s_destroy(Stack * stack)
    {
        free(stack->arr);
    }

    2016-01-10

  • 相关阅读:
    zbb20171108 一台电脑启动多个 tomcat
    zbb20171101 oracle 启动 linux
    zbb20171017 svn Cleanup failed to process the following paths错误的解决
    zbb20171013 mysql服务重启 重启服务 重启mysql服务
    zbb20171013 mysql 远程连接 报错 1130-host ... is not allowed to connect to this MySql server
    zbb20171013 svnserver 修改默认端口
    zbb20171013 tomcat 设置访问ip地址直接访问项目
    zbb20171013 Windows 下端口占用 查询 以及结束进程的方法
    20171012 nginx 超时时间配置
    20171012 tomcat 超时时间配置
  • 原文地址:https://www.cnblogs.com/ITgaozy/p/5119906.html
Copyright © 2020-2023  润新知