首页 > 其他分享 >C语言 Stack功能实现(自存)

C语言 Stack功能实现(自存)

时间:2024-05-03 20:55:22浏览次数:18  
标签:node Node 自存 top Stack C语言 stack size

#include<stdio.h>
#include <stdlib.h> 
#include<stdbool.h>

typedef int E;

typedef struct node {
    E data;
    struct node* next;
} Node;

typedef struct {
    Node* top;
    int size;
} Stack;

// API
Stack* stack_create(void);
void stack_destroy(Stack* s);

void stack_push(Stack* s, E val);
E stack_pop(Stack* s);
E stack_peek(Stack* s);

bool stack_empty(Stack* s);

int main() {
    Stack *s = stack_create();
    //stack_pop(s);
    stack_push(s, 1);
    stack_push(s, 2);
    stack_push(s, 3);
    int n=stack_empty(s);
    return 0;
}
Stack* stack_create(void) {
    Stack* s = malloc(sizeof(Stack));
    if (!s) {
        printf("Error: malloc failed in vector_create\n");
        exit(1);
    }
    s->size = 0;
    s->top = NULL;
    return s;
}
void stack_destroy(Stack* s) {
    Node* curr = s->top;
    while (curr) {
        Node* next = curr->next;
        free(curr);
        curr = next;
    }
    free(s);
}
//插入
void stack_push(Stack* s, E val) {
    Node* new_node = malloc(sizeof(Node));
    if (!new_node) {
        printf("Error: malloc failed in add_before_head\n");
        exit(1);
    }

    new_node->data = val;
    new_node->next = s->top;
    s->top = new_node;

    s->size++;
}
E stack_pop(Stack* s) {
    if (s->size == 0)
    {
        printf("size=%d!", s->size);
        exit(1);
    }
    E element = s->top->data;
    s->top = s->top->next;
    s->size--;
}
E stack_peek(Stack* s) {
    return s->top->data;
}

bool stack_empty(Stack* s) {
    return !(s->size);
}

 

标签:node,Node,自存,top,Stack,C语言,stack,size
From: https://www.cnblogs.com/Uiney117/p/18171599

相关文章

  • C语言编程规范——名称缩写
    C语言中常见名称缩写全称缩写翻译calculatecalc计算additionadd加subtractionsub减multiplicationmul乘法divisiondiv除法hexadecimalhex十六进制arrayarr数组、集合listlst列表Sequenceseq序列Segment(s)seg段......
  • C语言编程规范——命名规则
    一、C语言变量名的命名规则1.只能以字母下划线开始2.不能以数字开始3.不能使用默认关键字4.一般使用小写在程序设计中,变量名、函数名、数组名等统称为标识符。简单地说,标识符就是一个名字。除库函数的函数名由系统定义外,其余都由用户自定义。C语言规定,标识符只能由字母(a~z,A~Z)......
  • 【c语言】编译过程详解
    为什么我们编写的C语言要进行编译❓什么是编译❓编译时发生了什么❓机器无法理解我们编写的C语言,而编译就是将面向人类的高级语言转换成为面向机器的机器语言的过程,图1是GCC编译器进行编译的过程,编译时主要分为了4个阶段,每个阶段的具体作用将在接下来进行介绍。图1......
  • C语言解析FLM(ELF)格式文件
    代码下载:https://gitee.com/jhembedded/flmparse 写这篇博客的目的是因为最近在做一个STM32的离线编程器,离线下载需要用到FLM文件的下载算法,所以实现了一下提取FLM文件中下载算法的C程序。有关ELF格式的详细说明可查看这个文件:http://flint.cs.yale.edu/cs422/doc/ELF_Format.......
  • C语言编程规范——注释
    一、注释简介一般情况下,源程序有效注释量必须在20%以上。注释的目的是解释代码的目的、功能和采用的方法,提供代码以外的信息,帮助读者理解代码,防止没必要的重复注释信息。二、注释类型1.单行注释将注释放在双斜杠//后面,从双斜杠到行尾都属于注释。#include<stdio.h>intmain......
  • 使用新版flask-script时报错No module named flask._compat和cannot import name ‘_r
    flask版本:3.0.3Flask-Script:2.0.6Flask-script使用及错误Nomodulenamedflask._compat解决方法windows下推荐解决方案,点击flask_script进入init.py文件或虚拟环境\Lib\site-packages\flask_script_init_.pylinux下cd到目录/usr/local/lib/python3.12/site-packages......
  • c语言实现vector及其相关函数(自存)
    #include<stdio.h>#include<stdlib.h>#definePREALLOC_MAX1024#defineDEFAULT_CAPACITY8typedefintE;typedefstruct{E*elements;//指向堆空间的数组intsize;//元素的个数intcapacity;//数组的容量}Vector;voidpush_back(Vect......
  • 04. C语言数据使用方式
    【C语言简介】计算机的运行由CPU指令控制,为了让计算机执行指定功能,需要将这些功能对应的指令数据集中存储在一起,制作为一个计算机文件,这个文件称为程序,CPU通过读取程序中的指令确定要执行的功能,制作程序时无需直接编写指令数据和数学数据,这些数据使用代码表示,从而方便记忆和编写,......
  • C语言中四舍五入问题总结
    C语言中四舍五入问题的总结在C语言中大部分情况下都是不需要四舍五入的。除了一种情况:在使用输出函数printf()限制浮点型输出的小数位个数eg:printf("%0.2f",1.567);//输出的结果是1.57其他情况下都不需要四舍五入,比如自动转换在不同类型的混合运算中,编译器也会自动地转......
  • C语言程序设计——字符串典型题练习
    1、计算一个字符串中最大的重复子串的字符的数量/********************************************************************* name : CalSubStrMaxCnt* function:计算一个字符串中最大的重复子串的字符的数量* argument:* @str:需要查找的字符串的地址* * ret......