堆栈——C语言实现(静态数组)

堆栈——C语言实现(静态数组),第1张

1.首先写一个堆栈接口(stack.h),在里面声明堆栈 *** 作函数并定义堆栈存储数据类型。
/*
** 一个堆栈模块的接口
*/

#define STACK_TYPE int /*堆栈所储存的类型*/

/*
** push
** 把一个新值压入堆栈中,它的参数是被压入的值。
*/
void push(STACK_TYPE value);

/*
** pop
** 从堆栈中d出一个值,并将之返回
*/
STACK_TYPE pop(void);

/*
** top
** 返回堆栈顶部元素的值,但不对堆栈进行修改
*/
STACK_TYPE top(void);

/*
** is_empty
** 如果堆栈为空,返回TURE,否则返回FLASE
*/
int is_empty(void);

/*
** is_full
** 如果堆栈已满,返回TURE,否则返回FLASE
*/
int is_full(void);

/*
** len
** 返回堆栈已存储元素个数
*/
int len(void);
2.然后在另一个文件(a_stack.c)中,实现具体的堆栈函数
/*
** 用一个静态数组实现的堆栈,数组的长度只能通过修改#define来定义
** 并对模块重新进行编译来实现
*/

#include "stack.h"
#include 

#define STACK_SIZE 100 /*堆栈的容量*/

/*
** 用数组存储堆栈中的值,
** 定义一个指向堆栈顶部元素的指针(表面是个下标索引)。
*/
static STACK_TYPE stack[STACK_SIZE];
static int top_element = -1; /*表示堆栈初始为空*/

/*
** push
*/
void push(STACK_TYPE value){
    //断言函数,如果表达式为真,则无影响,反之,直接退出程序,返回错误信息
    assert( !is_full() );  
    top_element += 1;
    stack[top_element] = value;
}

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

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

/*
** is_empty
*/
int is_empty(void){
    return top_element == -1;
}

/*
** is_full
*/
int is_full(void){
    return top_element == STACK_SIZE - 1;
}

/*
** len
*/
int len(void){
    if(is_empty()){
        return 0;
    }
    else{
        return top_element + 1;
    }
}
3.最后编写一个测试主函数,试试 *** 作
#include "a_stack.c"
#include 

#define T "True"
#define F "False"

int main(){
    push(6);
    push(3);
    push(2);
    push(4);
    push(5);
    printf("栈顶元素为:%d\n",top());
    printf("堆栈为空吗?%s\n",is_empty()?T:F);
    printf("堆栈为满吗?%s\n",is_full()?T:F);
    printf("堆栈现在存储了%d个值\n",len());
    printf("堆栈d出了%d\n",pop());
    printf("堆栈现在存储了%d个值",len());
    return 0;
}

控制台输出为:

栈顶元素为:5
堆栈为空吗?False  
堆栈为满吗?False  
堆栈现在存储了5个值
堆栈d出了5        
堆栈现在存储了4个值
总结:静态数组实现的堆栈虽然简单,但比较死板,接下来介绍动态数组实现的堆栈。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/868176.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-13
下一篇2022-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存