【顺序栈的出栈,链栈的表示和实现,递归定义】

这篇具有很好参考价值的文章主要介绍了【顺序栈的出栈,链栈的表示和实现,递归定义】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

顺序栈的出栈

(1)判断是否栈空,若空则出错(下溢)。
(2)获取栈顶元素e。
(3)栈顶指针减1。

//顺序栈的出栈
int Pop(SqStack& S, SElemType& e) {
	//若栈不为空,则删除栈顶元素,用e返回其值,并返回ok;
	if (S.top == S.base) {
		return 0;
	}
	--S.top;
	e = *S.top;
	return 1;
}

链栈的表示和实现

链表的实现
链栈是运算受限的单链表,只能在链表头部进行操作。

//链栈的表示
typedef struct StackNode {
	int data;
	struct StackNode* next;
}StackNode,*LinkStack;
LinkStack S;

【顺序栈的出栈,链栈的表示和实现,递归定义】,数据结构

  • 链表的头指针就是栈顶。
  • 不需要头结点。
  • 基本不存在满栈的情况。
  • 空栈相当于头指针指向空。
  • 插入和删除仅在栈顶处执行。

链表的初始化

void InitStack(LinkStack& S) {
	S = NULL;
}

判断链栈是否为空

//链栈是否为空
bool StackEmpty(LinkStack S) {
	if (S == NULL) {
		return true;
	}
	else {
		return false;
	}
}

链栈的入栈

//链栈上的入栈
void Push(LinkStack S, int e) {
	LinkStack p;
	p = new StackNode;//生成新结点
	p->data = e;//将新结点的数据域置为e
	p->next = S;//将S结点赋值给p结点的next域
	S = p;//修改栈顶指针

}

【顺序栈的出栈,链栈的表示和实现,递归定义】,数据结构

链栈的出栈

//链栈的出栈
int Pop(LinkStack S,int e) {
	LinkStack p;
	if (S == NULL) {
		return 0;
	}
	e = S->data;
	p = S;
	S = S->next;
	delete p;
	return 1;
}

【顺序栈的出栈,链栈的表示和实现,递归定义】,数据结构

递归定义

若一个对象部分地包含他自己,或用他自己给自己的定义,就称这个对象是递归的。
若一个过程直接或间接地调用自己,则这个调用过程
是递归的过程。
分治法求解递归问题算法的一般形式:

void p(参数表){
	if(递归结束条件)可直接求解步骤;-------基本项
	else p(较小参数);---归纳项
}

例:求阶乘

long Fact(long n){
if(n==0{return 1}  ;
else return n*Fact(n-1);

函数的调用过程

调用前,系统完成:
(1)将实参,返回地址等传递给被调用函数
(2)为被调函数的局部变量分配存储区域
(3)将主调函数转移到被调函数
调用后,系统完成:
(1)保存被调函数的计算结果
(2)释放被调函数的数据区
(3)依照被调函数保存的返回地址转移到主调函数。
当多个函数嵌套调用时:
遵循后调用先返回。需要用栈来实现。
【顺序栈的出栈,链栈的表示和实现,递归定义】,数据结构文章来源地址https://www.toymoban.com/news/detail-718190.html

到了这里,关于【顺序栈的出栈,链栈的表示和实现,递归定义】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】顺序栈的基本操作:出栈、入栈、取栈顶元素、输出所有栈中元素、括号匹配题目

    栈是限定仅在表位进行插入或删除操作的线性表。栈的表尾称为栈顶,表头称为栈底。不含元素的栈称为空栈。 左图为栈的示意图,右图为用铁路调度表示栈。 如下是入栈至栈满再进行出栈的过程示意图。值得注意的是,栈满后,top指针指向的不是顶端元素,而是顶端的下

    2024年02月07日
    浏览(41)
  • 栈的定义及基本操作实现(顺序栈)

    个人主页:【😊个人主页】 系列专栏:【❤️数据结构与算法】 学习名言:天子重英豪,文章教儿曹。万般皆下品,惟有读书高 第一章 ❤️ 学前知识 第二章 ❤️ 单向链表 第三章 ❤️ 递归 相信大家小时后一定玩过玩具枪吧,在我们装子弹时玩具枪的子弹只能从弹夹的一

    2023年04月08日
    浏览(63)
  • 顺序栈的基本操作(存储结构设计、初始化、判空、判满、入栈、出栈、取栈顶元素、遍历输出栈内元素)

    以上为总的代码,对于栈满时存在一些问题待改进 ———————————————————————————————————————— 以下为代码编写过程,有参考网上大佬的代码   创建栈后报错,在scanf_s处缺少符号  会执行两遍创建栈?   在主函数里边确实有两

    2024年02月05日
    浏览(30)
  • 链栈(入栈,出栈,遍历)

    链式存储结构可以更好的避免栈上溢,因为顺序栈在定义结构体时需要定义最大值。 栈的链式存储结构就是链栈,栈底就是链表的最后一个结点,而栈顶是链表的第一个结点,一个链栈可以由栈顶指针top唯一确定。 结构体的定义: 运行结果:  多重链栈用到结构体数组这一

    2024年02月06日
    浏览(27)
  • 青岛大学_王卓老师【数据结构与算法】Week05_06_栈的顺序表示_学习笔记

    本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–第05周06–3.3栈的表示和实现2–3.

    2024年02月16日
    浏览(44)
  • c语言实现栈(顺序栈,链栈)

    🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 🍉本篇简介::讲解用c语言实现:“数据结构之\\\"栈”,分别从\\\"顺序栈\\\"和\\\"链栈\\\"的接口讲解. 金句分享: ✨不是每一场雨后都有彩虹,但是晴天总是会到来!✨ 栈:一种特殊的 线性表 ,

    2024年02月05日
    浏览(29)
  • 【数据结构】栈——共享栈、链栈(入栈 出栈 判空 创建 读栈顶元素)完整代码

    只允许在一端进行插入操作或删除的线性表。 重要术语 栈顶:允许 插入和删除的一端。 栈底:不允许 插入删除的一端。 空栈:不含任何元素的空表。 出栈顺序(卡特兰数): n个不同元素进栈,出栈元素不同排列的个数: 1 n + 1 C 2 n n frac{1}{n+1} quad C_{2n}^n n + 1 1 ​ C 2 n n ​

    2024年02月11日
    浏览(27)
  • 链栈的基本操作(超详细)

    目录 前言 一.链栈的定义  二、链栈的c++语言结构描述表示 三、链栈中基本操作的实现  3.1链栈的初始化 3.2判断链栈是否为空  3.3求链栈的长度  3.4 链栈的入栈 3.4 链栈的出栈 3.5求栈顶元素  3.6销毁栈 四.链栈的具体实现  五.测试结果 六、总结  本文参考王卓老师的数据结

    2023年04月25日
    浏览(34)
  • 【超详细版】4个元素A、B、C、D,按所列次序依次进栈,写出所有可能的出栈序列

      可能的出栈序列有: ABCD、ABDC、ACBD、ACDB、ADCB; BACD、BADC、BCAD、BCDA、BDCA; CBAD、CBDA、CDBA; DCBA  当有n个元素按照某种顺序压入栈中,所获得可能的出栈序列个数可用 Catalan(卡兰特)数 计算,即 如本题目的出栈序列个数有 14 个  文章目录 假设 A 先出栈 假设 C 先出栈 假设 B 先

    2024年02月06日
    浏览(41)
  • 【数据结构】链栈的基本操作(C语言)

    零零总总搜索了一些关于链栈的资料,了解了链栈的基本操作,一直觉得别人写的代码或多或少存在一些问题,所以打算自己写一篇关于链栈的文章,也算是对所学知识的梳理和巩固了。 首先说明本文使用C语言进行链栈的基本操作,链栈是无头结点的。这里补充说明一下,

    2024年02月05日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包