4.(数据结构)顺序栈+链栈+栈的应用(中缀转后缀表达式)

本文介绍了栈的数据结构特性,包括顺序栈和链栈的实现,以及它们在函数调用、回溯算法和深度优先搜索等场景中的应用。重点讲解了如何利用栈来将中缀表达式转换为后缀表达式,详细阐述了转换过程和规则,如处理运算符和括号的策略。
摘要由CSDN通过智能技术生成

堆栈:LIFO结构

1.按一定顺序进栈然后所有出栈顺序的可能性
核心:出栈的第一个元素是在原来的次序中是第几个,那么比它先入栈的元素,出栈顺序必须是逆序
因为从小到大入栈顺序是确定的,而出栈是随机的,也就是在入栈还没结束的情况下就可以出栈。这样,就会出现一些小的数提前出栈的现象。但是那些“守规矩”的小数相对位置是没有变化的。比如入栈12345,结果在4入栈之前3不听话先出去了。但是这不会影响1和2的顺序,1和2的相对顺序还是保持着 12入栈,21出栈。因为12是守规矩的。
eg. ABCD顺序进栈,有14种出栈可能性

2.顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成:
注意:void不代表没有返回类型,只是返回类型为空。如果return ;在方法体中间,表示退出方法的意思,后面的代码就不执行了。

#include <stdio.h>
#include <stdlib.h> 
#define MAXSIZE 10
#define ERROR -1
typedef int ElemType; 

typedef struct SNode *Stack;
struct SNode{
   
	ElemType data[MAXSIZE];
	int top;
}; 

以下为函数的实现:

void Push(Stack S,ElemType e){
   
	if(S->top==MAXSIZE-1){
   
		printf("栈满");
		return ; 
	}else{
   
		S->data[++(S->top)]=e;
		return ;   
	}
}

ElemType Pop(Stack S){
   
	if(S->top==-1){
   
		printf("栈本空");
		return ERROR; 
	}else{
   
		return (S->data[--(S->top
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值