基础介绍

用链表结构作为栈的支撑结构

代码

#include "stdio.h"    #define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20 /* 存储空间初始分配量 */typedef int Status;
typedef int SElemType; /* SElemType类型根据实际情况而定,这里假设为int *///链栈结构
typedef struct StackNode
{SElemType data;struct StackNode* next;
}StackNode, *LinkStackPtr;typedef struct
{LinkStackPtr top;int count;
}LinkStack;Status visit(SElemType   c)
{printf("%d", c);return OK;
}// 构造一个空栈S
Status InitStack(LinkStack* S)
{if (!S->top) //如果已经初始化过return ERROR;S->top = NULL;S->count = 0;return OK;
}//把S置为空
Status ClearStack(LinkStack* S)
{LinkStackPtr p;LinkStackPtr q;p = S->top;while (p){q = p;p = p->next;delete q;S->count--;}return OK;
}//判断是否为空栈
Status StackEmpty(LinkStack S)
{if (S.count == 0)return TRUE;else{return FALSE;}return TRUE;
}//返回栈的长度
Status StackLength(LinkStack S)
{return S.count;
}//返回栈顶元素
const Status GetTop(LinkStack *S, SElemType* e)
{if ((*S).top == NULL)return ERROR;else{*e = (*S).top->data;}return OK;
}//插入元素e为新的栈顶元素
Status Push(LinkStack* S, SElemType e)
{LinkStackPtr n = new StackNode();n->data = e; //当前元素作为顶元素n->next = (*S).top; (*S).top = n;//元素数目加1S->count++;return OK;
}//若栈不为空 则删除S的栈顶元素
Status Pop(LinkStack* S, SElemType* e)
{if (!S->top)return ERROR;else{//返回栈顶元素的值(*e) = S->top->data;//栈顶元素后移LinkStackPtr q = S->top;S->top = S->top->next;//删除栈顶元素delete q;S->count--;}return OK;
}//遍历栈
Status StackTraverse(LinkStack* S)
{LinkStackPtr p;p = S->top;while (p){visit(p->data);p = p->next;}printf("\n");return OK;
}
int main()
{int j;LinkStack s;int e;if (InitStack(&s) == OK)for (j = 1; j <= 10; j++)Push(&s, j);printf("栈中元素依次为:");StackTraverse(&s);Pop(&s, &e);printf("弹出的栈顶元素 e=%d\n", e);printf("栈空否:%d(1:空 0:否)\n", StackEmpty(s));GetTop(&s, &e);printf("栈顶元素 e=%d 栈的长度为%d\n", e, StackLength(s));ClearStack(&s);printf("清空栈后,栈空否:%d(1:空 0:否)\n", StackEmpty(s));return 0;
}

大话数据结构07 :链表栈相关推荐

  1. 数据结构 线性链表栈

    #ifndef _MY_LINKSTACK_H_ #define _MY_LINKSTACK_H_typedef void LinkStack;//创建链表栈 LinkStack* LinkStack ...

  2. C++数据结构之链表栈

    这里我们通过C++实现一个链表栈结构,内核是链表,但是需要遵循栈的规则,并包含初始化空栈,判断栈是否为空,判断栈是否已满,插入元素,删除元素,获取栈顶元素,具体操作如下所示: 堆栈的基本操作 初始化空 ...

  3. [大话数据结构-读书笔记] 栈

    栈 1 栈的定义 1.1 栈的定义 在我们软件应用中,栈这种后进先出数据结构的应用是非常普遍的.比如Word. Photoshop 等文档或图像编辑软件中, 都有撤销 (undo)的操作,也是用栈这种 ...

  4. 大话数据结构系列之栈的实际应用(十)

    文章目录 斐波那契函数推导( Java.C ) 使用栈来实现四则运算( Java.C ) 栈与递归的关系 "递归"与"迭代"的选择性讨论 诗词即兴环节 斐波那契 ...

  5. 大话数据结构 06:栈 顺序存储结构

    基础内容 栈的基础操作: 顺序栈代码 #include "stdio.h" #define OK 1 #define ERROR 0 #define TRUE 1 #define ...

  6. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  7. 《大话数据结构》3、4、5线性表、栈与队列、串

    第3章线性表 41 线性表:零个或多个数据元素的有限序列. 3.1开场白 42 门外家长都挤在大门口与门里的小孩子的井然有序,形成了鲜明对比.哎,有时大人的所作所为,其实还不如孩子. 3.2线性表的定 ...

  8. 大话数据结构-栈与队列

    文章知识点来至于大话数据结构里边章节知识, 这篇主要介绍栈与队列在计算机中存储形式, 以及在某些算法领域中对栈和队列的相关应用.章节最后介绍了著名的逆波兰表达式, 以及通过算法来实现该表达式的运算过程 ...

  9. 《大话数据结构》读书笔记-栈与队列

    写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书. 文章目录 4.2栈的定义 4.2.1 栈的定义 4.2.2 进栈出栈变 ...

最新文章

  1. 二叉树经典题之线索二叉树(中序)
  2. 点至直线的距离和垂足点计算
  3. java维护_java配置和维护
  4. 最近遇到个关于接口的奇怪的问题
  5. Oracle 公有云(OCI)价格与计费工具
  6. json_encode转义中文问题
  7. 手Q真的输给微信了吗?
  8. H5播放B站源的flv视频
  9. 抖音seo源码搭建 抖音矩阵系统具体功能展示?
  10. UE4 材质学习 (焚烧材质)
  11. Keras少量样本训练强大图像分类模型
  12. 高级软件工程第九次作业:东理三剑客团队作业-随笔5
  13. Matlab数字图像处理——图像文件的读取
  14. The s:form tag declares that it accepts dynamic attributes but does not implemen
  15. JAVA POI导出EXCEL设置自定义样式(线框加粗,合并指定行,合计求和,冻结行)
  16. 手机否总是欠费?一波操作,让你一目了然手机偷偷订了哪些业务
  17. 数说CS|北大信科保研生源大起底
  18. 一篇文章搞懂屈梁生院士说了什么(二维全息谱的理解)
  19. 基于UDP的多播(组播)文件传输
  20. 【知识图谱论文】视觉语境对知识图谱真的有帮助吗?表征学习视角

热门文章

  1. .Net设计模式_原型模式
  2. CVE-2019-2725复现(从环境搭建到getshell)
  3. react-redux中的持久化数据存储redux-persist
  4. 数据接口的登录态校验以及JWT
  5. 电脑科学性计算机怎么用,怎么使用科学计算器59 000×(1+r)-2
  6. element UI 制作模糊搜索框
  7. 数组字符串转化成数组与eval函数
  8. CNN结构:用于检测的CNN结构进化-一站式方法
  9. 安卓桌布显示的dip和px
  10. jchdl - 初次使用建立项目示例