多栈共享技术,双端栈的初始化、进栈、出栈操作
来源:互联网 发布:国际贸易统计数据库 编辑:程序博客网 时间:2024/04/20 05:27
栈的应用非常广泛,经常会出现一个程序中需要同时使用多个栈的情况。若使用顺序栈,会因为对栈空间大小难以准确估计,从而产生有的栈溢出、有的栈空间还很空闲的情况。为了解决这个问题,可以让多个栈共享一个足够大的数组空间,通过利用栈的动态特性来使其存储空间互相补充,这就是多栈的共享技术。
在顺序栈的共享技术中,最常用的是两个栈的共享技术,即双端栈。它主要利用了栈的栈底位置不变,而栈顶位置动态变化的特性。
实现代码如下:
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define M 100
//双端顺序栈的存储结构
typedef struct
{
int Stack[M];//Stack[M]为栈区
int top[2];//top[0]和top[1]分别为两个栈顶指示器
}DqStack;
//初始化双端顺序栈
void InitStack(DqStack *S)
{
S->top[0] = -1;
S->top[1] = M;
}
//双端顺序栈进栈操作
int Push(DqStack *S,int x,int i)//把数据元素x压入i号堆栈
{
if (S->top[0]+1 == S->top[1])//栈已满
{
return FALSE;
}
switch (i)
{
case 0: //0号栈
S->top[0]++;
S->Stack[S->top[0]] = x;
break;
case 1: //1号栈
S->top[1]--;
S->Stack[S->top[1]] = x;
break;
default: //参数错误
return FALSE;
break;
}
return TRUE;
}
//双端顺序栈出栈操作
int Pop(DqStack *S, int *x, int i)//从i号堆栈中弹出栈顶元素并送到x中
{
switch (i)
{
case 0: //0号栈出栈
if (S->top[0] ==-1)
{
return FALSE;
}
*x=S->Stack[S->top[0]] ;
S->top[0]--;
break;
case 1: //1号栈出栈
if (S->top[1] == M)
{
return FALSE;
}
*x = S->Stack[S->top[1]];
S->top[1]++;
break;
default:
return FALSE;
break;
}
return TRUE;
}
本文出自 “岩枭” 博客,请务必保留此出处http://yaoyaolx.blog.51cto.com/10732111/1771293
- 多栈共享技术,双端栈的初始化、进栈、出栈操作
- 链栈的常用操作(初始化,入栈,出…
- 链栈的基本操作(初始化,压栈,出栈)
- 关于顺序栈的初始化,进栈,出栈,栈满,栈空的操作
- 顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素
- 双向栈的初始化,压栈,出栈
- Java 用数组实现栈 (Stack),包括栈的初始化,入栈、出栈等操作
- C++栈的初始化,入栈,出栈,获取栈顶元素等操作
- 链栈的定义、初始化、出栈、入栈等操作
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现
- 采用顺序存储实现栈的初始化、入栈、出栈操作。
- 数据机构(五) 顺序栈的基本操作 --- 包含初始化,入栈和出栈
- 数据结构栈的数组实现初始化,入栈,出栈,获取栈顶元素,栈的长度等操作
- C语言实现顺序栈的基本操作(初始化、判断空、入栈、出栈、获取栈顶元素)
- 顺序栈的定义、初始化、出栈、入栈等操作 C++代码实现 ——感想
- 栈的初始化、压栈,栈的遍历、出栈、清空栈
- 栈的基本操作(进栈,出栈)
- 顺序栈初始化,判空,进栈,出栈,打印
- 顺序表的查找、插入、删除、合并操作及其优缺点
- 单链表的头插、尾插、删除、合并等操作
- 斐波拉契数列的递归、非递归、公式法多种方法实现
- win10系统桌面图标变为白色方框和去除桌面图标快捷方式小箭头的方法
- 顺序栈的基本操作:初始化、进栈、出栈、读栈顶元素
- 多栈共享技术,双端栈的初始化、进栈、出栈操作
- 链队列的初始化、入队、出队等操作实现
- 循环队列的初始化、入队、出队等基本操作
- 链栈的基本操作
- 多栈运算
- Flash的按钮链接在网页的中的使用
- 汉诺塔问题的递归解法
- 求f(k)=k^k(k=1...n)的前n项和
- 二分查找算法的递归、循环实现及其缺陷