栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

堆栈——C语言(链表)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

堆栈——C语言(链表)

想必你已经看完了我写的堆栈的数组版本,接下来,就好好看看链表怎么实现堆栈吧

1.首先定义一个堆栈接口(stack.h)
#include 

#define STACK_TYPE int 


void push(STACK_TYPE value);


STACK_TYPE pop(void);


STACK_TYPE top(void);


int is_empty(void);


int is_full(void);


int len(void);




void create_stack(size_t size);


void destroy_stack(void);
2.在另外一个文件(l_stack.c)中实现具体函数操作
#include "stack.h"
#include 
#include 
#include 
#include 

#define False 0


typedef struct STACK_NODE{
    STACK_TYPE value;
    struct STACK_NODE *next;
}StackNode;


static StackNode *stack;




void destroy_stack(void){
    // while( !is_empty() ){
    //     pop();
    // }
    stack = NULL;
}


void push(STACK_TYPE value){
    StackNode *new_node;
    new_node = malloc(sizeof(StackNode));
    assert(new_node != NULL);
    new_node->value = value; //箭头"->"访问操作符的左边只能为指向结构体的指针
    new_node->next = stack;
    stack = new_node;
}


STACK_TYPE pop(void){
    StackNode *first_node;
    assert( !is_empty() );
    first_node = stack;
    stack = first_node->next;
    return first_node->value;
}


STACK_TYPE top(void){
    assert( !is_empty() );
    return stack->value;
}


int is_empty(void){
    return stack == NULL;
}


int is_full(void){
    return False;
}


int len(void){
    if(is_empty()){
        return 0;
    }
    else{
        int i = 0;
        StackNode *find_node;
        find_node = stack;
        do{
            i++;
            find_node = find_node->next;
        }while(find_node != NULL);
        return i;
    }
}
3.最后编写一个主函数(l_main.c)测试堆栈操作
#include "l_stack.c"

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

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

控制台输出:

栈顶元素为:5
堆栈为空吗?False  
堆栈为满吗?False  
堆栈现在存储了5个值
堆栈弹出了5        
堆栈现在存储了4个值
总结:至此,我已经用静态数组,动态数组,链表共3种方法实现了堆栈,如有不对的地方,欢迎大家指点一二,强烈安利大家去看《C与指针》这本书,很牛逼的。
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/856369.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号