zoukankan      html  css  js  c++  java
  • C的指针疑惑:C和指针17(经典抽象数据类型)

    堆栈这种数据最鲜明的特点是:后进先出。

    用动态数组实现堆栈:

    #include "C17.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <assert.h>
    
    static STACK_TYPE *stack;
    //static size_t stack_size
    static int stack_size;
    static int top_element = -1;
    
    void create_stack(int size)
    {
        assert(stack_size == 0);
        stack_size = size;
        stack = (STACK_TYPE *)malloc(stack_size * sizeof(STACK_TYPE));
        assert(stack != NULL);
    }
    
    void destroy_stack(void)
    {
        assert(stack_size > 0);
        stack_size = 0;
        free (stack);
        stack = NULL;
    }
    
    void push (STACK_TYPE value)
    {
        assert(! is_full());
        top_element += 1;
        stack[top_element] = value;
    }
    
    void pop(void)
    {
        assert(!is_empty());
        top_element -= 1;
    }
    
    STACK_TYPE top(void)
    {
        assert(!is_empty());
        return stack[top_element];
    }
    
    int is_empty(void)
    {
        assert(stack_size > 0);
        return top_element == -1;
    }
    
    int is_full(void)
    {
        assert(stack_size > 0);
        return top_element == stack_size -1;
    }
    
    
    int main(void)
    {
        int ret,i;
        create_stack(5);
        for(i= 0;i<5;i++)
        {
            push(i);
        }
    
        for(i= 0;i<5;i++)
        {
            ret = top();
            printf("dynamic data: %d
    ",ret);
            pop();
        }
    }

    链式堆栈:

    #include "C17.h"
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
    #include <assert.h>
    
    #define FALSE  0
    
    typedef struct STACK_NODE
    {
        STACK_TYPE   value;
        struct STACK_NODE *next;
    }StackNode;
    
    static StackNode *stack;
    //static int stack_size;
    //static int top_element = -1;
    
    void create_stack(int size)
    {
    
    }
    
    void destroy_stack(void)
    {
        while(!is_empty())
            pop();
    }
    
    void push (STACK_TYPE value)
    {
        StackNode *new_node;
        new_node = (StackNode *)malloc(sizeof(StackNode));
        assert(new_node != NULL);
        new_node->value = value;
        new_node->next = stack;
        stack = new_node;
    }
    
    void pop(void)
    {
        StackNode *first_node;
    
        assert(!is_empty());
        first_node =stack;
        stack = first_node->next;
        free(first_node);
    }
    
    STACK_TYPE top(void)
    {
        assert(!is_empty());
        return stack->value;
    }
    
    int is_empty(void)
    {
        return stack == NULL;
    }
    
    int is_full(void)
    {
        return FALSE;
    }
    
    
    int main(void)
    {
        int ret,i;
        //create_stack(5);
        for(i= 0;i<5;i++)
        {
            push(i);
        }
    
        for(i= 0;i<5;i++)
        {
            ret = top();
            printf("dynamic data: %d
    ",ret);
            pop();
        }
    }

    队列:是一种先进先出的结构。需要两个指针:一个指向队头,一个指向队尾。

     

    树:

    属性:每个节点的值比它的左子树的所有节点的值都要大,但比它的右子树的所有节点的值都要小。

    树的遍历:前序、中序、后序、层次遍历

    前序遍历:检查节点的值->递归遍历左子树和右子树。

    中序遍历:遍历左子树->检查当前节点的值->遍历右子树。。

    后序遍历:遍历左右子树->检查当前节点的值。

    层次遍历:逐层检查树的节点。处理根节点->处理它的孩子->处理它的孙子。

  • 相关阅读:
    Shell高级编程学习笔记(基础篇)
    基于Python的机器学习实战:Apriori
    基于Python的机器学习实战:AadBoost
    Theano教程:Python的内存管理
    基于theano的降噪自动编码器(Denoising Autoencoders--DA)
    基于theano的深度卷积神经网络
    推荐系统之矩阵分解及C++实现
    推荐系统之协同过滤的原理及C++实现
    一步一步详解ID3和C4.5的C++实现
    Principal components analysis(PCA):主元分析
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/6607647.html
Copyright © 2011-2022 走看看