顺序栈和链栈的基本操作实现

【数据结构】栈的知识点总结--关于栈的定义和基本操作;C语言实现栈;顺序栈;链栈;共享栈;栈的易错点的总结 关于栈的定义和基本操作;C语言实现栈;顺序栈;链栈;共享栈;栈的易错点的总结 阅读详情

一、实验目的1、熟练掌栈的结构特点,掌握栈的顺序存储和链式存储结构和实现。

2、 学会使用栈解决实际问题。

二、实验内容

自己确定结点的具体数据类型和问题规模:

分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。

三、实验步骤

1、依据实验内容分别说明实验程序中用到的数据类型的定义;

2、相关操作的算法表达;

3、完整程序;

4、总结、运行结果和分析。

5、总体收获和不足,疑问等。

四、实验代码

1、顺序栈

 1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
      
#include <iostream>
using namespace std ;

//顺序栈的实现
const int StackSize = 10 ;

class SeqStack
{
public:
SeqStack (); //构造函数,初始化一个空栈
~ SeqStack (){} //析构函数为空
void Push ( int x ); //压/入栈操作,将元素x入栈
int Pop (); //弹/出栈,将栈顶元素弹 出
int GetTop (); //取栈顶元素(并不删除)
int Empty ();
private:
int data [ StackSize ]; //存放栈元素的数组
int top ; //栈顶指针,为栈顶元素在数组中的下标
};

SeqStack :: SeqStack ()
{
top =- 1 ;
}

//顺序表压栈函数Push

void SeqStack :: Push ( int x )
{
if ( top == StackSize - 1 ) throw "上溢" ;
data [ ++ top ] = x ;
}

//顺序表弹栈操作函数Pop

int SeqStack :: Pop ()
{
if ( top ==- 1 ) throw "下溢" ;
int x = data [ top -- ];
return x ;
}

int SeqStack :: GetTop ()
{
if ( top !=- 1 )
return data [ top ];
}

int SeqStack :: Empty ()
{
if ( top ==- 1 ) return 1 ;
{
if ( top ==- 1 ) return 1 ;
else return 0 ;
}
}

void main ()
{
SeqStack k1 ;
if ( k1 . Empty ())
cout << "栈为空" << " \n " << endl ;
else
cout << "栈非空" << endl ;
cout << "对99和88执行入栈操作" << " \n " << endl ;
k1 . Push ( 99 );
k1 . Push ( 88 );
cout << "栈顶元素为:" << " \n " << endl ;
cout << k1 . GetTop () << " \n " << endl ;
cout << "执行一次出栈操作" << " \n " << endl ;
k1 . Pop ();
cout << "栈顶元素为:" << " \n " << endl ;
cout << k1 . GetTop () << " \n " << endl ;
}
void main ()
{
SeqStack k1 ;
if ( k1 . Empty ())
cout << "栈为空" << " \n " << endl ;
else
cout << "栈非空" << endl ;
cout << "对99和88执行入栈操作" << " \n " << endl ;
k1 . Push ( 99 );
k1 . Push ( 88 );
cout << "栈顶元素为:" << " \n " << endl ;
cout << k1 . GetTop () << " \n " << endl ;
cout << "执行一次出栈操作" << " \n " << endl ;
k1 . Pop ();
cout << "栈顶元素为:" << " \n " << endl ;
cout << k1 . GetTop () << " \n " << endl ;
}


2、链栈

 1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
      
#include<iostream>
using namespace std ;

struct Node
{
int data ;
Node * next ;
};

class LinkStack
{
public:
LinkStack ();
~ LinkStack ();
void Push ( int x );
int Pop ();
int GetTop ();
int Empty ();
private:
Node * top ;
};

//构造函数
LinkStack :: LinkStack ()
{
top = new Node ;
top = NULL ;
}

//压栈函数
void LinkStack :: Push ( int x )
{
Node * s = NULL ;
s = new Node ;
s -> data = x ;
s -> next = top ;
top = s ;
}
//弹栈函数
int LinkStack :: Pop ()
{
if ( top == NULL ) throw "下溢" ;
else
{
int x ; Node * p = NULL ;
p = top ;
x = top -> data ;
top = top -> next ;
delete p ;
return x ;
}
}
//取栈顶元素
int LinkStack :: GetTop ()
{
if ( top != NULL )
return top -> data ;
}
//判空函数
int LinkStack :: Empty ()
{
if ( top == NULL )
return 1 ;
else return 0 ;
}
//析构函数
LinkStack ::~ LinkStack ()
{
Node * q = NULL ;
while ( top != NULL )
{
q = top ;
top = top -> next ;
delete q ;
}
}
//主函数
void main ()
{
LinkStack s ;
if ( s . Empty ())
cout << "此栈为空!" << " \n " << endl ;
else
cout << "此栈不为空" << " \n " << endl ;
cout << "对99和88进行压栈操作"" \n " << endl ;
s . Push ( 99 );
s . Push ( 88 );
cout << "栈顶元素为:" << " \n " << endl ;
cout << s . GetTop () << " \n " << endl ;
cout << "执行一次弹栈操作" << " \n " << endl ;
s . Pop ();
cout << "栈顶元素为:" << " \n " << endl ;
cout << s . GetTop () << " \n " << endl ;
}
五、实验运行结果

1、顺序栈


2、链栈



六、实验总结及心得

1、通过这次实验,可以得出以下总结:

(1)初始时顺序栈必须确定一个固定的长度,所以有存储个数的限制和空间浪费的问题

(2)而链栈没有栈满的问题,只有当内存没有空间可用时才会出现栈满,但是每个元素都需要一个指针域,从而产生了结构性开销。

(3)当栈的使用过程中元素个数变化较大时,用链栈是适宜的;反之,应该使用顺序栈。

2、这次的实验中,顺序栈和链栈的算法和代码相比顺序表和单链表要简单一点。而实验过程中比较容易出现的问题是不细心导致调试不出来,还有隔使我时间久了容易忘记,所以以后还是要多多回顾一下学过的知识,温故而知新才是。







实验3:栈和队列的基本操作实现及其应用——顺序栈和链栈 实验3:栈和队列的基本操作实现及其应用一、实验目的1、   熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。2、      学会使用栈和队列解决实际问题。二、实验内容1、自己确定结点的具体数据类型和问题规模:分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。分别建立一个顺序队列和链队列,实现队列的入队和出队操作。2、设计算法并写出代码,实现一个十将二进制转换成2进制数。3、选... 阅读详情

相关推荐

数据结构基础:顺序栈和链栈的表示以及实现

栈 定义和特点 限定仅在表尾进行插入或删除操作的线性表 包含两类栈,存储结构不同:顺序栈、链栈 栈的操作特性:后进先出 a1,为栈底元素;an,为栈顶元素。不含元素的空表为空栈 是操作受限制的线性表, 基本操作:入栈、出栈、读取栈顶元素值、建栈、判栈满或空等等 一、顺序栈的表示和实现 1.定义 利用一组地址连续的存储单元依次存放自栈底到栈顶的元素,同时附带指针指示栈顶元素在顺序栈中的位...

weirdo_cy的博客 1343

数据结构实验课:实验三、栈的实现及应用

一、实验目的 1.掌握栈的存储表示和实现 2.掌握栈的基本操作实现。 3.掌握栈在解决实际问题中的应用。 二、实验要求 问题描述:设计一个程序,演示用算符优先法对算术表达式求值的过程。利用算符优先关系,实现对算术四则混合运算表达式的求值。 (1)输入的形式:表达式,例如2*(3+4)# 包含的运算符只能有’+’ 、’-’ 、’’ 、’/’ 、’(’、 ‘)’,“#”代表输入结束符; (2)输出的形式:运算结果,例如2(3+4)=14; (3)程序所能达到的功能:对表达式求值并输出。 三、解题参考思路 为了实

listboy的博客 1万+

从零开始解析N-CMAPSS数据集:航空发动机健康管理的入门指南

本文详细解析了N-CMAPSS数据集在航空发动机健康管理中的应用,从数据集的构成、关键变量到实际数据分析方法,为初学者提供了全面的入门指南。通过Python代码示例,展示了如何加载、探索和建模这一复杂数据集,帮助读者掌握航空发动机性能预测的核心技术。

weixin_29063979的博客 319

实验3:顺序栈的基本操作

实验3:顺序栈的基本操作 实验目的: 1、掌握顺序栈的存储结构 2、实现顺序栈的基本操作 实验内容: 判断一个表达式中括号“(”与“)”、“[”与“]”、“{”与“}”是否匹配。若匹配,则返回1;否则返回0。 实验数据: {(1+2/[3])} {[}]2+4() 实验要求: 代码完整 程序的运行结果 实验心得(实验收获,不足): 提示: 本实验是在顺序栈的基本上完成的,请写出顺序栈的定义和关于顺序栈的七种操作。 再写上int Match(ElemType *exps)函数。

zsl20200217的博客 2173

FineReport SQL查询分页

打开模板>模板web属性>分页预览设置,选择为该模板单独设置,将默认的工具栏按钮全部清除掉,然后依次添加两个自定义按钮,一个邮件按钮,两个自定义按钮,一个Word格式,一个PDF按钮。如下所示:注:使用具体格式按钮,如邮件、Word格式、PDF按钮是为了JS直接使用控件名称获取空间方便修改其内容;

lep的博客 2427

Test软件:Keysight二次开发_(3).安装与配置开发环境

在开始进行Keysight软件的二次开发之前,首先需要确保您的开发环境已经正确安装和配置。本节将详细介绍如何安装和配置必要的开发工具和依赖项,以便您能够顺利进行开发工作。

2401_87715305的博客 1413

C语言|顺序栈和链栈|定义、初始化、判空、入栈、出栈、取顶等

顺序栈和链栈的相关操作顺序栈完整代码(静态分配)分解代码顺序栈类型定义顺序栈的初始化静态分配动态分配顺序栈的销毁顺序栈的清空顺序栈的判空顺序栈的判满顺序栈的入栈顺序栈的出栈顺序栈取栈顶元素链栈完整代码分解代码结点类型定义链栈类型定义生成新结点链栈的初始化链栈的清空链栈的判空链栈的入栈链栈的出栈链栈取栈顶元素 顺序栈 完整代码(静态分配) #include<stdio.h> #include<stdlib.h> #define MAXSTACK 100 typedef int Stac

weixin_48709737的博客 3962

Error response from daemon: Get “https://index.docker.io/v1/search?q=nginx&n=25“:

在使用docker seach 命令搜索镜像的时候遇到这个错误,docker pull是可以正常下载镜像的,关于这个问题,本文提供解决方案,完全可行。

猿小白的博客 1万+

【数据结构】顺序栈和链栈的基本操作(定义,初始化, 入栈,出栈,取栈顶元素,遍历,置空)

详细讲解顺序栈和链栈的初始化,入栈,出栈,取栈顶元素,遍历,置空等操作

小吉妙妙屋 1万+

OpenClaw 生成测试用例

OpenClaw 只是躯干,Skills 才是灵魂。很多同学觉得 OpenClaw 没用,就像是买了一台顶级电脑却没装操作系统。通过这四步走,不仅可以学会如何让 AI 干活,更重要的是,可以学会如何管理 AI 的能力。

十二测试录 737

【腾讯小龙虾 WorkBuddy 专栏 03】技能(Skills)制作全教程!自定义技能编写、导出分享、导入使用一步到位

🔥腾讯AI智能体WorkBuddy自定义技能全攻略 本文为零基础用户提供WorkBuddy自定义技能的完整教程,涵盖技能概念、编写规范到实操全流程。核心内容包括: 技能本质:标准化任务指令模板,可固化重复操作流程 三大价值:一键执行重复任务/跨设备共享/降低使用门槛 实操演示:以"桌面文档自动分类"为例,分步讲解编写、测试、导出 共享方案:支持单技能/批量导出,通过任意渠道传输分享 导入指南:3秒完成他人技能加载,并提供常见问题解决方案 高阶优化:增加异常处理、版本管理等提升技能普适性

AI人人懂 2944

顺序栈、链栈基本操作

顺序栈的基本概念、初始化、入栈、出栈、清空、销毁 顺序栈存储方式:同一般线性表的顺序存储结构完全相同,利用一组地址连续的存储单元依次存方自栈底到栈顶的数据元素,栈底一般在低地址端。 附设top指针,指示栈顶元素在顺序栈中的位置。但是为了操作方便,通常top指示真正的栈顶元素之上的下标地址。 另设base指针,指示栈底元素在顺序栈中的位置。 另外,用stacksize表示栈可使用的最大容量。 判...

ker的博客 2094

179、运动控制中的行业标准:机器人安全标准ISO 10218

今天这篇笔记,就把我踩过的坑和标准里的硬骨头掰开揉碎讲清楚。

m0_50546716的博客 168

c++实现顺序栈和链栈的基本操作——有详细注解

顺序栈 #include<iostream> using namespace std; //顺序栈的存储结构 #define MAXSIZE 100 typedef struct { int *base; //栈底指针 int *top; //栈顶指针 int stacksize; //栈可以用的最大容量 }SqStack; //构造一个空栈 void InitStack(SqStack &S){ S.base = new int[MAXSIZE];//为顺序栈分配一个最大容量

m0_67228478的博客 1821

第10集:AIOps 平台架构设计!画出面试官最想看的系统全景图

本文介绍了如何将AIOps平台的六大功能模块整合为四层架构设计,并生成专业系统全景图。文章首先指出面试中架构设计能力的重要性,强调一张清晰的架构图能直观展现全局观。随后指导读者检查项目结构,准备绘图环境。核心部分详细拆解了四层架构:数据采集层(Prometheus、ELK等)、AI分析层(巡检、告警、预测等)、决策执行层(工作流引擎、自愈Agent)和展示交互层(API、控制台)。通过Python代码自动生成模块依赖关系图,并提供了面试讲解技巧。全文旨在帮助开发者在面试中系统性地展示项目架构设计能力。

qq_2937655951的博客 92

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

顺序栈与链队列C语言实验报告,实验3:栈和队列的基本操作实现及其应用——顺序队列和链队列...

实验3:栈和队列的基本操作实现及其应用一、实验目的1、 熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。2、 学会使用栈和队列解决实际问题。二、实验内容1、自己确定结点的具体数据类型和问题规模:分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。分别建立一个顺序队列和链队列,实现队列的入队和出队操作。2、设计算法并写出代码,实现一个十将二进制转换成2进制数。3、选...

weixin_28692867的博客 1791

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C语言实现栈的基本操作,包括顺序栈,有头结点的链栈和无头结点的链栈

C语言实现栈的基本操作,包括顺序栈,有头结点的链栈和无头结点的链栈

我一定要早睡 323

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数据结构顺序栈和链栈基本操作----c++实现

顺序栈: #include using namespace std; #define MaxSize 50 class SeqStack{ private: int data[MaxSize]; int top; public: void initStack(); //初始化栈 void Push(int elem);//入栈 int Pop();//出栈 b

supersnow0622的专栏 6530

顺序栈和链栈的初始化,出栈,进栈的具体实现(new和exit的用法)

文章目录一 . 栈的定义和特点二 . 栈的抽象类型定义三 . 顺序栈的基本操作1 . 顺序栈的定义2 . 初始化new和exit的用法new的用法:exit的用法:3 . 入栈(压栈)4 . 出栈5 . 取栈顶元素四 . 链栈的基本操作1 . 链栈的定义2 . 初始化3 . 入栈4 . 出栈5 . 取栈顶元素五 . 顺序栈操作的实现六 . 链栈基本操作的实现 一 . 栈的定义和特点 栈的基本操作...

xdznb_的博客 3668

模板类封装(2)——顺序栈和链式栈

自封装模板类,包括各数据结构

cos的博客 745

数据结构(C语言实现)——栈和队列的介绍及基本操作的实现(动态顺序栈+链队)

本文为大家介绍了俩种特殊的线性结构——栈和队列,此处代码实现非常简单,主要是了解栈和队列的特点。

_Fiora的博客 1909

顺序栈与链栈的基本操作

栈的定义和特点 栈是限定仅在表尾进行插入或删除操作的线性表。对栈来说,表尾端称为栈顶(top),表头端称为栈底(bottom)。不含元素的空表空表称为空栈。 栈也被称为先进后出的线性表 栈的抽象数据类型定义 ADT Stack{ 数据对象:D={ai | ai∈ElemSet, i=1,2,…,n,n≥0} 数据关系:R={ <a(i-1) , ai> | a(i-1), ai...

wmy0217_的博客 1362

顺序栈的基本操作(超详细)

本文是在b站上学完王卓老师之后写的,各种操作我都觉得都十分的详细。如果代码或者描述有不对的地方,欢迎大家指正。

m0_53679998的博客 3万+

顺序栈和链栈的各种操作

一.先说顺序栈 /********************************************************** 顺序栈的各种操作13-5-1.cpp 1.初始化栈 2.判断栈空 3.入栈 4.出栈 5.取栈顶元素 6.主函数测试以上功能

ERIC的编程之路 2613

顺序栈和链栈的基本操作(C语言)

【代码】顺序栈和链栈的基本操作(C语言王道)

weixin_55582076的博客 275

数据结构——栈基本操作的实现

栈的基本操作包括了:入栈、出栈、判断栈是否为空、初始化等。 顺序栈的实现: 利用顺序表实现栈的基本操作: #include<bits/stdc++.h> using namespace std; #define clr(a) memset(a, 0, sizeof(a)) #define line cout<<"----------"<<endl;...

辞树 902
上一篇: 静态链表的基本操作实现
下一篇: 顺序队列及链队列的基本操作实现
IMIS_TwentyEight
博客等级 码龄9年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值