热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

考研数据结构复习:链式栈深入解析与应用

在考研数据结构复习中,链式栈的深入解析与应用是一个重要环节。本文详细探讨了链式栈的实现方法,特别是栈底和栈顶指针的使用。通过对比常见的单链表实现方式,本文整理了一份代码示例,与王道复习指导中的链式存储类型高度一致。此外,本文还提供了详细的注释和解释,帮助读者更好地理解和掌握链式栈的原理与应用。

参考网上的内容,大部分的链栈实现用到了栈底和栈顶两个指针,而下文整理的这份代码,基本上与单链表的实现方式如出一辙。

与王道复习指导上给的栈的链式存储类型相一致。


#include
#include
<malloc.h>
typedef
struct Linknode{
int data;
struct Linknode *next;
}Linknode,
*LiStack;
/* -1- 初始化链栈*/
bool InitStack(LiStack S){
S
->next = NULL;
return true;
}
/* -2- 判断是否栈空*/
bool StackEmpty(LiStack S){
if(S->next == NULL){
printf(
"空栈!\n");
return true;
}
else{
return false;
}
}
/* -3- 进栈(插入元素)*/
bool Push(LiStack S,int e){
Linknode
*temp;
temp
= (Linknode*)malloc(sizeof(Linknode));
temp
->data = e;//!1
temp->next = S->next;//!2
S->next = temp;//!3
//!!!S->next是首元节点
return true;
}
/* -4- 读取栈顶元素*/
int GetTop(LiStack S,int e){
if(!StackEmpty(S)){
e
= S->next->data;//!4
}
else{
return false;
}
return e;
}
/* -5- 出栈*/
bool Pop(LiStack S,int e)
{
Linknode
*temp = S->next;
e
= temp->data;
S
->next = temp->next;
free(temp);
return true;
}
int main(){
LiStack S;
S
= (LiStack)malloc(sizeof(Linknode));
InitStack(S);
int l;
printf(
"请输入元素个数:\n");
scanf(
"%d",&l);
printf(
"请依次输入:\n");
for(int i=0; i){
int m;
scanf(
"%d",&m);
Push(S,m);
}
int flag;
printf(
"请进行选择:\n");
printf(
"==1.栈顶元素:\n");
printf(
"==2.依次输出栈内元素:\n");
scanf(
"%d",&flag);
switch(flag){
case(1):
{
int e;
printf(
"当前栈顶元素为:%d\n",GetTop(S,e));
break;
}
case(2):
{
int i=0;
while(l > 0)
{
int n;
printf(
"经过第%d次出栈操作后,当前栈顶元素为:%d\n",i,GetTop(S,n));
Pop(S,n);
l
--;
i
++;
}
printf(
"结束!\n");
break;
}
}
return 0;
}


最终结果:

技术分享图片

 

 



推荐阅读
  • 本文将从基础概念入手,详细探讨SpringMVC框架中DispatcherServlet如何通过HandlerMapping进行请求分发,以及其背后的源码实现细节。 ... [详细]
  • 本文介绍了如何通过C#语言调用动态链接库(DLL)中的函数来实现IC卡的基本操作,包括初始化设备、设置密码模式、获取设备状态等,并详细展示了将TextBox中的数据写入IC卡的具体实现方法。 ... [详细]
  • 嵌套列表的扁平化处理
    本文介绍了一种方法,用于遍历嵌套列表中的每个元素。如果元素是整数,则将其添加到结果数组中;如果元素是一个列表,则递归地遍历这个列表。此方法特别适用于处理复杂数据结构中的嵌套列表。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 在日常生活中,支付宝已成为不可或缺的支付工具之一。本文将详细介绍如何通过支付宝实现免费提现,帮助用户更好地管理个人财务,避免不必要的手续费支出。 ... [详细]
  • 本文详细介绍了iOS应用的生命周期,包括各个状态及其转换过程中的关键方法调用。 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 解决Visual Studio Code中PHP Intelephense误报问题
    PHP作为一种高度灵活的编程语言,其代码结构可能导致Intelephense插件在某些情况下报告不必要的错误或警告。自1.3.3版本起,Intelephense引入了多个配置选项,允许用户根据具体的工作环境和编程风格调整这些诊断信息的显示。 ... [详细]
  • 心理学经典:《思考致富》
    《思考致富》是由美国著名成功学大师拿破仑·希尔撰写的一部重要著作,该书基于希尔长达20年的深入研究和访谈,探讨了个人成功的核心要素。书中不仅揭示了成功的关键,还提供了一系列实用的方法和策略。 ... [详细]
  • 本文将详细介绍如何在二进制和十六进制之间进行准确的转换,并提供实际的代码示例来帮助理解这一过程。 ... [详细]
  • empty,isset首先都会检查变量是否存在,然后对变量值进行检测。而is_null只是直接检查变量值,是否为null,因此如果变量未定义就会出现错误!检测一个变量是否是null ... [详细]
  • 在处理大数据量的SQL分页查询时,通常需要执行两次查询来分别获取数据和总记录数。本文介绍了一种优化方法,通过单次查询同时返回分页数据和总记录数,从而提高查询效率。 ... [详细]
  • 本文通过一个具体的实例,介绍如何利用TensorFlow框架来计算神经网络模型在多分类任务中的Top-K准确率。代码中包含了随机种子设置、模拟预测结果生成、真实标签生成以及准确率计算等步骤。 ... [详细]
author-avatar
兰勇2502919543
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有