zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Qt之根据扩展名获取文件图标、类型
    C++根据扩展名获取文件图标、类型
    Qt之QFileIconProvider(根据扩展名获取文件图标、类型)
    Qt之QTemporaryFile
    Qt之QFileIconProvider
    Qt之字典划词
    Qt之滚动字幕
    Qt之QThread
    Python 安装 httplib2
    Qt之QTimer
  • 原文地址:https://www.cnblogs.com/ITgaozy/p/5119906.html
Copyright © 2011-2022 走看看