码迷,mamicode.com
首页 > 其他好文 > 详细

栈(建立,销毁,判空,判满及入栈和出栈)

时间:2018-05-11 23:49:53      阅读:386      评论:0      收藏:0      [点我收藏+]

标签:++   des   lse   define   返回值   物理   cap   数组   特点   

栈的基本概念:

逻辑线性结构,堆栈可以用数组实现,也可以用链表实现,堆栈的概念只是一个逻辑结构,而实现是物理结构。

特点;

1:单端入数据;

2:先进后出

 

代码实现如下:

.h代码如下:

#ifndef _MEC_STACK_H_
#define _MEC_STACK_H_

#include "mec.h"

typedef struct MEC_STACK {
    void **stack;                     //定义一个类型是void *的*stack,即就是说stack地址里面存放了一个类型void的指针 。
    int capacity;                    //定义一个栈的容量表示;
    int top;                          //定义一个栈顶指针;
}MEC_STACK;

void initializeMecStack(MEC_STACK **head, int capacity);        //创建一个栈;
void destoryMecStack(MEC_STACK **head);                              //销毁一个栈;
boolean isMecStackEmpty(const MEC_STACK stackCtrl);              //判断栈是否为空栈;
boolean isMecStackFull(const MEC_STACK stackCtrl);                  //判断栈是否已栈满;
boolean push(MEC_STACK *head, void *value);                          //进行入栈操作;
void *pop(MEC_STACK *head);                                           //进行出栈操作;

#endif

.c代码如下:

#include <stdio.h>
#include <malloc.h>

#include "../include/mec_stack.h"
#include "../include/mec.h"

void initializeMecStack(MEC_STACK **head, int capacity) { 
        //定义一个无返回值类型的创建栈的函数,有两个形参,分别是控制头的首地址和栈的容量


    if(NULL == head || NULL != *head || capacity <= 0) {        
    //判断是否有控制头有就返回了还有判断容量是否大于0;


        return;
    }
    *head = (MEC_STACK *) calloc(sizeof(MEC_STACK));            //申请一个类型为 MEC_STACK *的控制头;
    (*head)->capacity = capacity;                                    //让*head指向的空间的capacity等于形参capaciy;
    (*head)->top = 0;                                                  //让*head指向的空间的top值为零;
    (*head)->stack = (void **) calloc(sizeof(void *), capacity);        //申请一个真正的堆栈空间;
}

void destoryMecStack(MEC_STACK **head) {   
              //定义一个无返回值类型的销毁栈的函数,只需要需要控制头的首地址即 MEC_STACK **head


    if(NULL == head || NULL == *head) {
        return;
    }
    free((*head)->stack);               //先释放堆栈空间;
    free(*head);                        //再释放控制头的空间;
    *head = NULL;                    
}

boolean isMecStackEmpty(const MEC_STACK stackCtrl) {
    return 0 == stackCtrl.top;
}
 
boolean isMecStackFull(const MEC_STACK stackCtrl) {
    return stackCtrl.top >= stackCtrl.capacity;
}

boolean push(MEC_STACK *head, void *value) {
    if(NULL == head || NULL == value || isMecStackFull(*head)) {
        return FALSE;
    }
    
    head->stack[head->top++] = value;
    
    return TRUE;
}

void *pop(MEC_STACK *head) {
    if(NULL == head || isMecStackEmpty(*head)) {
        return NULL;
    }
    
    return head->stack[--head->top];+
}

 

栈(建立,销毁,判空,判满及入栈和出栈)

标签:++   des   lse   define   返回值   物理   cap   数组   特点   

原文地址:https://www.cnblogs.com/youdiaodaxue16/p/9026525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!