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和指針》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM