C语言描述栈的实现及操作(数组实现)

一.静态数组实现

1.堆栈接口

//    一个堆栈模块接口
//    命名为stack.h

#define        STACK_YTPE        int        //    堆栈所存储值的类型

//    push函数
//    把一个新值压入栈中
void push(STACK_YTPE value);

//    pop函数
//    从堆栈中弹出一个值
STACK_YTPE pop(void);    

//    top函数
//    返回堆栈顶部元素的值
STACK_YTPE top(void);

//    is_empty函数
//    如果堆栈为空,返回TRUE,否则返回FALSE
bool    is_empty(void);

//    is_full函数
//    如果堆栈已满,返回TRUE,否则返回FALSE
bool is_full(void);

2.静态数组堆栈

#include<stdio.h>
#include<assert.h>
#include"stack.h"

#define STACK_SIZE    100        //    堆栈中值数量的最大限制

static    STACK_TYPE    stack[STACK_SIZE];    //    存储堆栈中值得数组
static    int    top_element = -1;    //    指向顶部元素的指针

void push(STACK_TYPE value){
    assert(!is_full());
    top_element += 1;
    stack[top_element] = value;
}

STACK_TYPE pop(void){
    assert(!is_empty());
    return    stack[top_element--];
}

STACK_TYPE    top(void){
    assert(!is_empty());
    return stack[top_element];
}

bool    is_empty(void){
    return    top_element == -1;
}

bool is_full(void){
    return top_element == STACK_SIZE-1;
}

 

  

二.动态数组实现

1.堆栈接口

  只需要最原来的stack.h接口基础上加上添加以下两个定义即可。

//    creat_stack函数
//    创建堆栈。参数指定可以保存多少元素
void    creat_stack(size_t size);

//    destroy_stack函数
//    销毁堆栈。释放堆栈所使用的内存
void destroy_stack(void);

2.动态数组堆栈

//    一个动态分配数组实现的堆栈

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include<malloc.h>
#include"stack.h"

//    用于存储堆栈元素的数组和指向堆栈顶部元素的指针
static  STACK_TYPE    *stack;
static    size_t    stack_size;
static    int     top_element = -1;

//creat_stack
void  creat_stack(size_t size){
    assert(stack_size == 0);
    stack_size = size;
    stack = malloc(stack_size*sizeof(STACK_TYPE));
    assert(stack != NULL);
}

//destroy_stack
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;
}

STACK_TYPE pop(void){
    assert(!is_empty());
    return    stack[top_element--];
}

STACK_TYPE    top(void){
    assert(!is_empty());
    return stack[top_element];
}

bool    is_empty(void){
    return    top_element == -1;
}

bool is_full(void){
    return top_element == stack_size-1;
}

 

参考文献

《C和指针》

posted @ 2018-01-04 22:33  !Vincent  阅读(3912)  评论(0编辑  收藏  举报