使用单链表来实现,push,pop均在链表头部进行

linkStack.h

#ifndef LINK_STACK_H
#define LINK_STACK_H
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <stdbool.h>typedef void LinkStack;LinkStack* LinkStack_Create();void LinkStack_Destroy(LinkStack* stack);void LinkStack_Clear(LinkStack* stack);int LinkStack_Push(LinkStack* stack, void* item);void* LinkStack_Pop(LinkStack* stack);void* LinkStack_Top(LinkStack* stack);int LinkStack_Size(LinkStack* stack);bool LinkStack_isEmpty(LinkStack* stack);#endif //LINK_STACK_H

linkStack.c

#include"linkStack.h"
#include"linkedList.h"typedef struct NodeItem {LinkedListNode node;void* item;
}StackItem;LinkStack* LinkStack_Create() {return LinkedList_Create();
}void LinkStack_Destroy(LinkStack* stack) {LinkStack_Clear(stack);LinkedList_Destory((LinkedList*)stack);return;
}void LinkStack_Clear(LinkStack* stack) {if (stack == NULL) {return;}while (LinkStack_Size(stack) > 0) {LinkStack_Pop(stack);}
}int LinkStack_Push(LinkStack* stack, void* item) {StackItem* element = (StackItem*)malloc(sizeof(StackItem));element->node.next = NULL;if (element == NULL) {fprintf(stderr,"malloc memeory error.\n");return - 1;}memset(element, 0, sizeof(StackItem));element->item = item;int ret = LinkedList_Insert((LinkedList*)stack, &element->node, 0);if (ret != 0) {fprintf(stderr,"LinkedList_Insert() error.\n");if (element != NULL) {free(element);}return -2;}return 0;
}void* LinkStack_Pop(LinkStack* stack) {if (stack == NULL) {return NULL;}StackItem* element = (StackItem*)LinkedList_Delete((LinkedList*)stack, 0);if (element == NULL) {return NULL;}void* item = element->item;free(element);return item;
}void* LinkStack_Top(LinkStack* stack) {if (stack == NULL) {return NULL;}StackItem* element = (StackItem*)LinkedList_Get((LinkedList*)stack, 0);if (element == NULL) {return NULL;}return element->item;
}int LinkStack_Size(LinkStack* stack) {if (stack == NULL) {return 0;}return LinkedList_Length((LinkedList*)stack);
}bool LinkStack_isEmpty(LinkStack* stack) {return LinkStack_Size(stack) == 0;
}

转载于:https://blog.51cto.com/xwandrew/2045455

C语言实现链式栈(LinkStack)相关推荐

  1. C语言_链式栈结构+二进制计算器

    文章目录 1.链式栈结构实现 2.利用栈结构的进制计算器 1.链式栈结构实现 #include<stdio.h>#include<stdlib.h>#include<st ...

  2. 常用数据结构与经典算法 简单讲解与示例代码

    数据结构与算法 数据结构与算法是一个学习计算机绕不过去的话题,而我们大学之中多数课程之中都使用伪代码进行讲解,给对我们的学习理解也是一把双刃剑,虽然可以让我们自己通过算法.思路自己写出程序,但也可能& ...

  3. linkstack头文件 c语言,链式栈的基本操作——LinkStack(C语言版)

    #include "stdafx.h" #include #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 # ...

  4. c语言建立栈(顺序栈、双栈和链式栈)

    c语言建立栈 顺序存储 栈的顺序存储定义 初始化栈 入栈操作 出栈操作 其余操作 读取栈顶元素 栈中元素个数 栈是否为空 双栈 双栈的顺序存储结构定义 建立双栈 判断栈为空 进栈操作 出栈操作 链式栈 ...

  5. 数据结构——顺序栈和链式栈的简单实现和解析(C语言版)

    摘自:数据结构学习--顺序栈和链式栈的简单实现和解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:26:49 网址:https://blog.csdn.net/chineseko ...

  6. 【数据结构】链式栈的实现(C语言)

    栈的链式存储称为链式栈,链式栈是一种特殊的单链表,它的插入和删除规定在单链表的同一端进行.链式栈的栈顶指针一般用top表示.(个人理解:相当于只对单链表的第一个结点进行操作) 链式栈要掌握以下基本操作 ...

  7. c语言数据结构篇之栈(线性栈与链式栈)

    线性栈 1.判空条件:S.top==-1; 2.满栈条件:S.top=maxn-1 #include<cstdio> #include<stdlib.h>#define max ...

  8. (C语言版)栈和队列(一)——实现链式栈和链式队列的基本操作以及遇到的问题

    http://blog.csdn.net/fisherwan/article/details/20055179 首先要感谢这位大牛的一篇博客,地址如下:http://blog.csdn.net/hgu ...

  9. C语言 链式栈和顺序栈的实现

    1.简介: 栈(stack)又名堆栈,它是一种运算受限的线性表.限定仅在表尾进行插入和删除操作的线性表.这一端被称为栈顶,相对地,把另一端称为栈底.向一个栈插入新元素又称作进栈.入栈或压栈,它是把新元 ...

最新文章

  1. 解读:为什么要做特征归一化/标准化?
  2. python基础语法 第0关print-重庆酉阳高校邦数据科学通识课【Python基础语法】答案...
  3. git 怎么读_python3中开源代码怎么读?
  4. spring 线程安全
  5. mysql怎么连接数据连接池_Mysql数据库连接池
  6. 05 | 服务编排层:Pipeline 如何协调各类 Handler ?
  7. JavaScript字符串split方法
  8. python实现给定一个列表,输出由各个位置除了自身元素外所有元素乘积组成的列表
  9. 浙大计算机基础知识试题及答案,14年浙大远程教育计算机基础4.电子表格Excel 2010知识题(高起专)作业题4答案...
  10. pytorch代码阅读、代码学习
  11. Android 四大组件
  12. 驱动上下游高效协同,跨境B2B电商平台如何释放LED产业供应链核心价值
  13. 一秒钟Hold住Application.xml
  14. Python爬虫-02 request模块爬取妹子图网站
  15. asponse.word按模板导出word文档
  16. 初级项目管理培训心得
  17. 数独的随机终盘生成函数设计
  18. WEB攻防-通用漏洞SQL读写注入ACCESS偏移注入MYSQLMSSQLPostgreSQL
  19. 二、JSP常用小知识之http 403错误
  20. JavaScript去除数组重复的元素且都不保留

热门文章

  1. AI赌神超进化:德扑六人局击溃世界冠军,诈唬如神,每小时能赢1千刀 | Science...
  2. 全球首富贝佐斯离婚协议达成,前妻获383亿美元
  3. ansible register when: result | succeeded when: item.rc != 0
  4. cocos2dx event call stack
  5. [转]C#多线程学习(四) 多线程的自动管理(线程池)
  6. 吉他谱——再回首pic
  7. 多元有序logistic回归_医学统计与R语言:多分类logistic回归HosmerLemeshow拟合优度检验...
  8. OPNFV — Overview
  9. Linux Kernel TCP/IP Stack — L3 Layer — netfilter 框架 — iptables NAPT 网络地址/端口转换
  10. 5G NGC — 关键技术 — 计算与存储分离