创建lstack.h

#pragma once
//链式栈:利用带头节点的单链表实现
//栈顶为第一个数据结点,因为:头插O(1),头删:O(1),有尾指针的的尾插:O(1),有尾指针的尾删O(n)typedef struct SNode
{int data;struct SNode *next;
}SNode,*PLStack;//注意:链式栈不需要top,因为头结点的next即为top//初始化栈
void InitStack(PLStack ps);//入栈
bool Push(PLStack ps,int val);//出栈,获取栈顶值,并删除栈顶元素
bool Pop(PLStack ps,int *rtval);//rtval:输出参数//获取栈顶值,但不删除
bool GetTop(PLStack ps,int *rtval);//判空
bool IsEmpty(PLStack ps);//获取长度
int GetLength(PLStack ps);//清除数据
void Clear(PLStack ps);//销毁栈
void Destory(PLStack ps);

创建lstack.cpp

#include<stdio.h>
#include<assert.h>
#include<stdlib.h>
#include"lstack.h"//判空
static void DeterPointNull(PLStack ps)
{assert(ps!=NULL);if(ps==NULL){exit(0);}
}//初始化
void InitStack(PLStack ps)
{DeterPointNull(ps);ps->next=NULL;
}//入栈(单链表的头插)
bool Push(PLStack ps,int val)
{DeterPointNull(ps);SNode *p=(SNode *)malloc(sizeof(SNode));p->data=val;p->next=ps->next;ps->next=p;return true;
}//出栈,获取栈顶值,并删除栈顶元素
bool Pop(PLStack ps,int *rtval)//rtval:输出参数
{DeterPointNull(ps);if(IsEmpty(ps)){return false;}*rtval=ps->next->data;SNode *p=ps->next;ps->next=p->next;return true;
}//获取栈顶值,但不删除
bool GetTop(PLStack ps,int *rtval)
{DeterPointNull(ps);if(IsEmpty(ps)){return false;}*rtval=ps->next->data;return true;
}//判空
bool IsEmpty(PLStack ps)
{DeterPointNull(ps);return ps->next==NULL;
}//获取长度
int GetLength(PLStack ps)
{DeterPointNull(ps);int count=0;for(SNode *p=ps->next;p!=NULL;p=p->next){count++;}return count;
}//清除数据
void Clear(PLStack ps)
{DeterPointNull(ps);ps->next=NULL;
}//销毁栈
void Destory(PLStack ps)
{DeterPointNull(ps);SNode *p;while(ps->next!=NULL){p=ps->next;ps->next=p->next;free(p);}
}

链栈的入栈、出栈、获取长度、获取栈顶值等相关操作相关推荐

  1. (C语言版)栈和队列(二)——实现顺序存储栈和顺序存储队列的相关操作

    http://blog.csdn.net/fisherwan/article/details/21479649 栈和队列都有两种实现方式,一种在之前已经写过了,是链式存储形式,另一种是顺序存储形式.也 ...

  2. vue如何获取数组中的键值_vue中操作数组的相关方法

    1,锁定数组的长度(只读模式)[ Array.join() ] 2.将数组合并成字符串(返回字符串)[ Array.join() ] 3.返回逆序数组(倒叙排列数组)[ Array..reverse( ...

  3. 链栈的入栈和出栈代码_代码简介:全栈开发仍然有效

    链栈的入栈和出栈代码 Here are three stories we published this week that are worth your time: 这是我们本周发布的三个值得您关注的 ...

  4. 数据结构与算法--举例分析法- 栈的压入弹出序列

    举例分析 与上两篇问中画图方法一样,我们可以用举例模拟的方法思考分析复杂问题.当一眼不能看出问题的规律的时候,我们可以用几个具体的例子来模拟一下问题的过程.这样就和我们在程序出现问题时候的debug一 ...

  5. 数据结构 - 栈(链表实现栈的入栈出栈)

    学完链表和栈,数组模拟栈学完后,自己根据链表写了个链栈,虽然只是简单的实现了入栈出栈遍历.收获还是很大的. 在push这里思考了一会,思路是:传入一个数字,push里创建一个节点node,把数据加入n ...

  6. 【数据结构与算法】栈的介绍及基本运算(出栈、入栈、销毁栈等)

    一.栈的介绍 栈(Stack)是限定只能在表的一端进行插入和删除操作的线性表. 允许插入和删除运算的一端称作栈顶(top). 不允许插入和删除的另一端称作栈底(bottom). 在栈顶进行的插入操作称 ...

  7. 【剑指offer-Java版】22栈的压入弹出序列

    栈的压入弹出序列:给定两个序列,一个是压入顺序,判断另外一个是否是该压入顺序的一个弹出顺序 思路:纯粹的模拟栈的压入和弹出顺序 分别遍历压栈序列seq1和另一个序列seq2 比较当前栈顶元素和seq2 ...

  8. 面试题之判断栈的入栈和出栈序列的合法性

    完整题目是这样的:给我们两个序列,第一个序列表示栈的压入顺序,然后让判断第二个序列是不是是否是该栈的弹出序列.现设第一个序列为[1,2,3,4,5],第二个序列为[3,2,5,4,1],可以看出这个出 ...

  9. python 栈的压入弹出序列

    | 栈的压入和弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序, 请判断第二个序列是否为该栈的弹出顺序. 假设压入栈的所有数字均不相等. 例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序 ...

最新文章

  1. Python-logging报错解决:UnicodeEncodeError: 'gbk' codec can't encode character '\u' in position: illegal
  2. 安装中文VS2008 SP1之后 智能提示是英文的解决办法
  3. 窗口之间值、控件的传递
  4. 微软起诉Google阻止前高管跳槽
  5. BZOJ 1692: [Usaco2007 Dec]队列变换( 贪心 )
  6. java的基本结构_【Java基础】基本程序设计结构
  7. python查询mysql数据库_用python操作mysql数据库(之简单查询操作)
  8. mysql语句解析_mysql 语句的查询过程解析
  9. dup_val_on_index_oracle学习笔记(十六) PL/SQL 异常和goto语句
  10. Qt中SQL语句update同时更新多字段及设置字段值为空的方法
  11. 教学网站毕业设计源码【演示视频】
  12. 内网html预览word,C# 实现Office在线预览
  13. 用美图秀秀批量修改图像尺寸分辨率大小、批量修改名字
  14. php手册3.1,ThinkPHP3.1手册
  15. 2022-2028全球及中国光伏金属化铝膏行业研究及十四五规划分析报告
  16. 类似qq的汉字拼音首字查询
  17. 小学计算机教室外墙文化建设,4款小学教室外墙布置图片 小学教室走廊班牌班级文化墙设计图片...
  18. 使用X-NUCLEO-GFX01M1 开发板快速进行 GUI 开发
  19. LED电源按驱动方式分类,有这两种
  20. ANASYS Fluent保存的文件打不开或打开出现错误,解决方法

热门文章

  1. 打开虚拟机报错,解决:Entering emergency mode. Exit the shell to continu
  2. 邮票问题---动态规划
  3. 新手做网站优化要思考三个本质问题!
  4. 安卓sdk开发!阿里面试100%会问到的JVM,架构师必备技能
  5. 基于Python医学院校二手书管理毕业设计-附源码201704
  6. 生产环境LVM卷ext4文件系统故障修复处理
  7. calipso是什么意思_fub是什么意思_fub怎么读_fub翻译_用法_发音_词组_同反义词_小而胖的人-新东方在线英语词典...
  8. 云南2018年GDP增长8.9% 较2017年增长速度有所下降
  9. 原生JS总结-- JS 绑定点击事件
  10. MATLAB的常用的三角函数 计算函数