链式栈的接口实现

数据结构链式栈C++实现 链式栈的存储形式是链表,示意图如下: 只需要一个top指针,入栈出栈都在top指针处。不同于顺序栈的top,链式栈的top是真真正正的节点类型的指针。下面是链式栈的实现; 1. 使用struct的模板来定义节点,包括数据域和指针域,代码如下: //用struct定义节点 template <class T> struct LinkNode { T data; //数据域 LinkNode<T> * link; //指针域,指向下一个节点 LinkNode() //仅 阅读详情

1.栈的特点是 先进后出 。

2.链式栈没有限定容量(MAXSIZE),也就是栈可以容纳的元素取决于内存分配。对特定的程序,用不同的方法实现,如还可以用数组式的栈。

3.实际上是一个没有头节点的链表,只不过对操作做了限定

4.把栈顶元素定为 链表的第一个节点,也就是头指针指向的结点为栈顶,这样在压栈和出栈是方便操作。

5.下面是对链式栈的实现,并写了一个驱动程序进行测试。

6..驱动程序说明:输入仅由  ' ( '    和   ' ) ' 组成的 字符组合,判断 括号是否匹配。

   如 ( )      和        ()()     和     (())      都是匹配的。

7.注意,在dos命令行界面下,EOF是用键盘的ctrl  +  z 组合 模拟的。另外,输入EOF需要在新的一行输入.



# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>
# include <assert.h>

typedef char DataType;   /* 对特定程序要求作修改为相应的数据类型*/ 

typedef struct stack
{
	DataType data;
	struct stack*next;
	
}SNode;

typedef SNode* Stack;


/************ADT接口声明******************/ 
void InitStack(Stack*pf);
int Push(Stack*pf,DataType tdata);
int Pop(Stack*pf);
int GetTop(Stack*pf,DataType *pdata);
unsigned int StackLength(Stack*pf);
int StackIsEmpty(Stack*pf);
void DestroyStack(Stack*pf);
/*****************END********************/


/*
驱动测试程序说明:从控制台输入 仅有  '('  和  ')' 2个字符
检测左右括号是否匹配,如() ,(()) 都为匹配,否则不匹配 
                              
*/

int main (void)
{
	
	Stack test;
	InitStack(&test);
	
	char current;
	char previous;
	
	
	while((current=getchar())!=EOF )
	{
		//putchar(current);  
		  
		if(current=='\n')//消除输入完毕后按下回车键在缓冲区产生的'\n'字符的影响 
		 continue;
		 
		assert(Push(&test,current));  //入栈 
		
		
		if(1!=StackLength(&test))   //当栈中只有一个元素时,没必要比较匹配 
			if(previous=='(' && current==')')
			{
				Pop(&test);
				Pop(&test);
			}
		
		GetTop(&test,&previous);  //获取栈顶元素,为下一次匹配准备 
	
	}
	
	
	printf("\n");
	
	if(StackIsEmpty(&test))  //经过循环匹配后栈空了,则说明匹配 
	   puts("符号匹配!");
	
	else
	   puts("符号不匹配!");
	
	
	return 0;
	
} 

void InitStack(Stack*pf)
{
	
	*pf=NULL;
	return ;
}

int Push(Stack*pf,DataType tdata)
{
	SNode*pnew;
	
	pnew=(SNode*)malloc(sizeof(SNode));
	if(pnew==NULL)
       return 0;
       
	pnew->data=tdata;
	pnew->next=*pf;
	*pf=pnew;        //新进栈元素成为栈顶 
	
	return 1;
}

int Pop(Stack*pf)
{
	
	SNode*pt;
	
	if(*pf==NULL)  //如果是空栈 
	    return 0;
	
	pt=*pf;        //取出第一个节点地址 
	
	*pf=(*pf)->next;  //栈顶指针下移 
	free(pt);
	
	return 1;
}

int GetTop(Stack*pf,DataType *pdata)
{
	
	if(*pf==NULL) //如果是空栈 
	    return 0;
	
	
	*pdata=(*pf)->data; //取出栈顶数据 
	return 1;
}

unsigned int StackLength(Stack*pf)
{
	SNode*p=*pf;  //取出第一个节点地址 
	unsigned count = 0;
	
	while(p!=NULL)
	{
		p=p->next;
		++count;
	}
	
	return count;
}


int StackIsEmpty(Stack*pf)
{
	
	return (*pf)==NULL;
	
} 


void DestroyStack(Stack*pf)
{
	SNode*p=(*pf); //取出第一个节点地址 
	SNode*pt;
	
	while(p!=NULL)
	{
		pt=p;
		p=p->next;
		
		free(pt);
	}
	
	return ;
	
	
}


保姆级教程:用Qlib和LightGBM从零搭建你的第一个AI量化选股策略(附完整代码) 本文提供了一份详细的教程,教你如何使用Qlib和LightGBM从零搭建AI量化选股策略。教程涵盖了环境配置、数据获取、特征工程、模型训练和策略回测等关键步骤,并附有完整代码和常见问题解决方案,适合量化投资初学者快速上手。 阅读详情

相关推荐

卷积神经网络-猫狗识别(附源码)

利用python实现一个卷积神经网络,训练猫狗数据集,实现对猫狗图片的预测识别

m0_63223213的博客 2万+

【数据结构】栈各个接口的实现

前面我们已经学习了顺序表和链表的相关知识和对各个接口实现,而今天我们将对栈进行学习。今天对栈的实现到此就结束,分别讲解栈的概念和栈接口的实现,我今天使用数据实现栈,大家理解完之后,可以尝试使用链表实现,帮助自己更好的理解和使用栈的相关操作。文章仍有许多不足,欢迎大家私信交流。

zz02_24的博客 629

CH455G数码管驱动与键盘扫描:I2C通信协议深度解析与实战代码

本文深度解析CH455G芯片的I2C通信协议,涵盖数码管驱动与键盘扫描功能的实战应用。通过详细讲解起始/停止信号、数据帧结构、应答机制及单片机代码实现,帮助开发者高效利用该芯片减少IO占用,提升嵌入式系统设计效率。

tea88的博客 1085

栈的常用接口

#include<iostream> #include<stack> #include<algorithm>//标准算法头文件 using namespace std; //栈stack容器 先进后出 void test01() { stack<int>s; //入栈 s.push(10); s.push(20); s.push(30); cout << "栈的大小" << s.size() << endl; .

courage_lizy的博客 259

COMSOL解的继承

COMSOL解的继承1. 应用场景2. 实现方法2.1. 添加研究步骤2.2. 引用研究 根据参考文献整理而来,原文见: http://blog.sina.com.cn/s/blog_4a0a8b5d010126w5.html https://www.zhihu.com/question/371867999/answer/1309194094 个人学习笔记,如有疏漏,欢迎补充 1. 应用场景 在COMSOL模拟中,一次求解之后往往遇到以下几种情况需要用到解的继承: 1)瞬态求解的继续运算。例如初始设定求解1

jessica0307的博客 2万+

Cesium实战:如何在前端直接渲染TIFF影像(附完整代码与避坑指南)

本文详细介绍了如何在前端利用Cesium直接加载和渲染TIFF影像的完整技术方案。针对TIFF格式的地理影像数据,文章提供了从文件解析、坐标转换到像素处理与Cesium集成的全流程代码实现,并分享了性能优化与常见问题的避坑指南,帮助开发者高效实现三维地理可视化。

weixin_29290947的博客 317

栈的基本接口

Stack.h #ifndef _STACK_H_ #define _STACK_H_ #include<stdio.h> #include<Windows.h> typedef int STDataType; typedef struct Stack { STDataType a[20]; int top; //栈顶 int capacity; //容量 }S...

Hello World! 1257

微信小程序 - 详细实现可移动悬浮按钮,全屏悬浮元素图标可拖动拖拽并自动吸附边缘,微信小程序实现悬浮球吸附边缘+计算靠边靠拢效果(详细代码,拖拽中途放手,靠左就自动跑到屏幕左侧,反之靠右跑到屏幕右侧)

微信小程序,vue2,vue3,微信小程序悬浮功能小按钮,自动吸附边缘效果,微信小程序之可拖动悬浮按钮的实现,如何实现靠近边缘自动吸住功能,小程序右下角的悬浮效果,实现可拖动悬浮图标,自动向两边靠拢,悬浮按钮的实现,微信小程序悬浮球效果,微信小程序(可拖动悬浮按钮)当靠近屏幕边缘时会磁吸靠近,如何实现全局悬浮按钮,悬浮球判断吸附在左右,全屏悬浮能拖着走,小程序怎么做悬浮图标靠近左右两侧能吸附住,悬浮菜单按钮,悬浮球可拖拽,全局悬浮球,全局悬浮框,实现悬浮按钮可拖动,自动吸附边缘效果,若按钮此时位于页面中间偏

🏆 前端领域优质创作者 1万+

【数据结构】深度剖析栈的各接口功能实现

前面我们学习了顺序表与链表的相关知识,也实现了它们各自的所有常用功能接口,理清了二者的使用差异和适用条件,而今天我们就将进入下一部分关于 栈(stack)的研究之中。

weixin_59392935的博客 1589

代码复现3—VLN-CE

运行训练完后在 data文件下会自动生成一个“checkpoints”文件,文件下包含任务文件“seq2seq”,该文件下会包括训练出来的权重和评估结果。数据集下载完后路径提取:data/scene_datasets/mp3d/{scene}/{scene}.glb。注意这里下载的数据集并不是所有的matterport3d,只需要一部分,包含90个场景,大小压缩后约16G。在“eval”时,会在data文件下生成videos文件,里面存放的是可视化的轨迹视频。

qq_44100524的博客 3203

锂电池寿命预测 | Python实现基于LSTM长短期记忆神经网络的锂电池寿命预测

锂电池寿命预测 | Python实现基于LSTM长短期记忆神经网络的锂电池寿命预测

算法如诗的博客 1902

【数据结构】栈的接口的实现(用c语言实现)

栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LFO (Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶。   栈的实现 栈的实现一般可以使用数组或者链表实现,相对...

qq_42270373的博客 458

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

C栈的链式存储接口实现

#include <stdlib.h> //节点结构体 struct stackNode { struct stackNode *next; }; //栈的结构体 struct LStack { struct stackNode * pHeader; int m_size; }; typedef void* LinkStack; //初始化 LinkStack intt_LinkStack() { struct LStack * myStack = mall

weixin_47776194的博客 103

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

JAVA版数据结构之栈的链式存储实现

JAVA版数据结构之栈的链式存储实现

627

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【数组栈】实现

今天开始进入栈和队列。

m0_74841364的博客 1106

数据结构七:线性表之链式栈的设计

从以上分析,我们可以知道链式栈只是单链表的一种特殊情况,限定了数据元素的插入和删除位置,链式栈是一种基于单链表实现的栈,在空间复杂度上,顺序栈在创建时就申请了数组空间,若栈经常处于不满状态将造成存储空间的浪费;链式栈所需空间是根据需要随时申请的,比之顺序栈仅仅是其每个结点需要额外的空间以存储其next指针域。在时间复杂度上,对于针对栈顶的基本操作(压入、弹出和栈顶元素存取),容易看出,顺序栈和链式栈的时间复杂性均为O(1)。

weixin_47040031的博客 969

顺序栈和链式栈

那我们要实现出栈入栈的代码逻辑应该是怎样,首先需要一个地址标记栈的位置,我们叫做data可以把data声明为一个数组,再创建一个成员pos指向待插入位置,有了这两成员我们可以用以下逻辑实现数据的出栈入栈。我们之前学了表他是元素与元素之间为1:1的关系,但在很多场景我们给它添加一些约束会更加的有意义,比如栈,插入和删除只能在一端操作、比如队列,插入和删除只能在两端操作。栈就像枪的弹夹,一端开口一端封闭,把元素想象成子弹一个一个压入弹夹,那么就会有一个特点。2.将头文件的接口一一实现。

2503_92099422的博客 180

栈概念和结构

介绍数据结构的栈概念和结构以及实现方法,用c语言实现,要注意栈顶指向位置以及对应的实现办法

wrrtx的博客 637

【深入解析:数据结构栈的魅力与应用】

栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,。出栈:栈的删除操作叫做出栈。。

qq_64446981的博客 1296

java链式存储_关于Java算法与数据结构-栈的链式存储实现

package com.ssm.cts.test;/*** CopyRright (c)2018-2028: chanpinxue.cn* Project: cts* Module Name: StackTest* Comments: 栈* JDK version used: JDK1.8* Author: jzh* Create Date: 2018-12-04* Modified By: jz...

weixin_42122838的博客 226

栈与队列实现与练习

本文讲解了队列与栈的基本实现和练习题,帮助初学者更好的理解

weixin_53117402的博客 1070

链式栈实现

/链式栈数据结构定义。main.c测试接口。

tecoes的博客 135

C语言实现栈和队列(动态)

C语言实现栈和队列(动态)

2301_76269963的博客 2185

【初阶数据结构07】——栈与队列的代码实现与解析

本文详细介绍了栈和队列两种基本数据结构。栈采用后进先出(LIFO)原则,通过动态数组实现,包含初始化、入栈、出栈等核心操作接口。队列遵循先进先出(FIFO)原则,使用链表结构实现,提供了入队、出队等基本功能。文章还简要提及循环队列的概念,并强调这两种结构在算法设计中的重要性。所有实现均采用C语言编写,代码完整可运行,适合数据结构初学者学习实践。

一名零基础编程小白的成长历程 607

C语言数据结构之栈

栈可以分为数组栈和链式栈,如果是链式栈,如果用尾做栈顶,尾插尾删,那么在每次删除数据的时候,需要找到尾的前一个,得设计双向链表,不然删除的效率很低。如果是头插头删,用头做栈顶就可以。栈与之前写的顺序表十分类似,栈是一个后进先出的结构,进行数据的插入和删除的一端称为栈顶,另一端称为栈底,栈的插入叫进栈/压栈/入栈,栈的删除操作叫出栈。显然数组栈的结构占优。

2301_80266699的博客 370

数据结构——顺序栈与链式栈

10分钟带你轻松玩转栈

2501_93095927的博客 2717
上一篇: 链表接口的实现
下一篇: 循环队列的实现
love1code
博客等级 码龄12年 19粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值