多栈运算

多栈运算的算法思想:将多个链栈的栈顶指针放在一个一维指针数组中来统一管理,从而实现同时管理和使用多个栈。

多链栈示意图

实现代码如下:

#include<iostream>

using namespace std;

#define TRUE 1

#define FALSE 0

#define M 10

typedef struct node

{

int data;

struct node *next;

}LinkStackNode, *LinkStack;

LinkStack top[M];

//第i号栈进栈操作

int Pushi(LinkStack top[M], int i,int x)//将元素x进入第i号链栈

{

LinkStackNode *temp;

temp = (LinkStackNode *)malloc(sizeof(LinkStackNode));

if (temp==NULL)//申请空间失败

{

return FALSE;

}

temp->data= x;

temp->next = top[i]->next;

top[i]->next = temp;//修改当前栈顶指针

return TRUE;

}

//第i号栈出栈操作

int Pop(LinkStack top[M], int i,int *x)//将第i号栈的栈顶元素弹出,放到x所指的存储空间中

{

LinkStackNode *temp;

temp = top[i]->next;

if (temp == NULL)//第i号栈为空栈

{

return FALSE;

}

top[i]->next = temp->next;

*x=temp->data ;

free(temp);//释放存储空间

return TRUE;

}

时间: 2024-10-08 10:14:27

多栈运算的相关文章

[数据结构]栈的学习

栈的定义 栈是一种限定的线性表 比喻:装羽毛球的盒子, 栈抽象数据类型 栈的分类 1  顺序栈   2多栈共享技术 3  链栈  4 多栈运算 3.1,顺序栈的定义: 自己的理解:不是动态的,比较死; 3.1.1进栈 注意点:要判断是否满. 比喻:如果羽毛球盒子满了怎么可能在装?!    3.1.2出栈 注意:要判断是是否为空 比喻:如果羽毛球盒子空了,还怎么拿羽毛球?1! 3.1.3 进栈和出栈示意图: 比喻:进栈如同装羽毛球,出栈如同拿羽毛球. 3.1.4读栈顶元素 思考:说明读栈顶元素和退

数据结构(C实现)------- 顺序栈

栈是限定仅在表的一端进行插入或删除的纯属表,通常称允许插入,删除的一端为栈顶(Top),相应在的,则称另一端为栈底(Bottom).不含元素的栈则称为空栈. 所设栈S={a1,a2,a3,...,an},则称a1为栈底元素,an为栈顶元素.根据栈的定义可知,栈顶元素总是最后入栈并且最先出栈的:栈底元素总是最先入栈并且最后出栈的.即栈是按后进先出的原则进行的.因此,栈又称为后进先出(LIFO)的线性表. 而顺序栈,即栈的顺序存储结构.它是利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同

栈内存和堆内存的区别

总结: 1 栈:为编译器自动分配和释放,如函数参数.局部变量.临时变量等等 2 堆:为成员分配和释放,由程序员自己申请.自己释放.否则发生内存泄露.典型为使用new申请的堆内容. 除了这两部分,还有一部分是: 3 静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.它主要存放静态数据.全局数据和常量. 转自: 栈内存和堆内存的区别(一个笔试题的一部分)http://blog.csdn.net/richerg85/article/details/19175133 笔试

一、四则运算栈实现,支持小数、负数

四则运算栈实现,支持小数.负数,经过测试,暂时没发现错误! 思路: 1.去掉字符串中的空格,将字符串按照运算符和数字保存到vector<string>中: 2.判断字符串是否符合四则运算的表达式: 3.栈实现:数字栈.运算符栈,从左到右扫描中缀表达式: 数字:直接入栈:运算符: (1)”(“:直接入栈: (2)”)“:弹出()之间的运算符,进行运算: (3)”+-*/“:如果当前运算符优先级<栈顶运算符优先级,则数字栈弹出两个数和栈顶运算符进行运算,并将结果存入数字运算符,再将当前运算符

关于栈及其应用演示样例

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/30802249 作者:小马 作为一种经常使用的数据结构, 了解栈对于算法的学习是很必要的. 栈有先进后出的特点,栈底指向数据表中的第一个元素.栈顶指向最后一个元素的下一个位置. 例如以下图所看到的: 栈和线性表类似.也是有两种存储结构.分别为顺序结构和链式结构. 大部分情况下,栈使用前者.这和它的使用场景有关.由于通常情况下我们不会对栈进行频繁地.随机地插入,删除操作.以下是我用顺

Flex版本的基于栈的表达式计算器

/** * 表达式计算器,输入数学表达式的字符串,输出计算结果的数值 * 1.扫描表达式,将运算符与运算数分别入栈, * 2.运算符入栈前先与上一个运算符进行优先级比较,如果当前运算符优先级低于或等于前一个运算符, * 则将前一个运算符和对应的运算数出栈运算,否则运算符直接入栈 * @author lijy */ public class ExpressionCaculator { /** * 运算数栈 * */ private var numberStack:Array; /** * 运算符栈

关于栈及其应用示例

转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/30802249 作者:小马 作为一种常用的数据结构, 了解栈对于算法的学习是非常必要的.栈有先进后出的特点,栈底指向数据表中的第一个元素,栈顶指向最后一个元素的下一个位置.如下图所示: 栈和线性表类似,也是有两种存储结构,分别为顺序结构和链式结构.大部分情况下,栈使用前者,这和它的使用场景有关,因为通常情况下我们不会对栈进行频繁地,随机地插入,删除操作.下面是我用顺序结构实现的栈,

顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素

顺序栈:利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时由于栈操作的特殊性,还必须附设一个位置指针top(栈顶指针)来动态地指示栈顶元素在顺序栈中的位置.通常以top=-1表示空栈. 代码如下: #include<iostream> using namespace std; #define  TRUE 1 #define  FALSE 0 //顺序栈的存储结构 #define Stack_Size 50 //设栈中元素个数为50 typedef struct { int elem

数据结构实践——后缀表达式(栈)

本文是针对数据结构基础系列网络课程(3):栈和队列的实现项目. [项目 - 后缀表达式] 利用sqstack.h中栈的基本运算,实现将一个中缀表达式转换为对应的后缀表达式的算法.例如,输入(56-20)/(4+2),输出后缀表达式::56#20#-4#2#+/要求在数字后加#. 参考解答说明: 原理见视频 栈的应用1-表达式求值,还可以参考表达式求值的源码 基于栈结构,将中缀表达式转换为后缀表达式的算法步骤是: 初始化运算符栈op; 将'='进栈; 从exp读取字符ch; while (ch!=