关于两个栈的共享空间问题理解。
2011-11-26 20:58
190 查看
为什么要共享空间?谁用谁的多好呀!但是呢,我们都知道使用过程中我们给每个栈分配足够的空间是不太现实的,使用栈的时候,我们也不能保证栈有足够的空间,另外,栈是一个动态的存储结构,各个栈的实际大小在使用的过程中都会发生变化的,有时候其中一个已经上溢了,而另外一个还没用怎么使用。这样必定会造成空间的利用率降低。怎么办?怎么办?
共享空间可以解决一定的问题。
栈共享示意图
栈一是从栈底开始的,而栈二是从栈顶开始(其实都是栈底)栈一的位置为stack[0],栈二为stack[MaxSize-1];通过观察,只有当栈一和栈二的栈顶指针相遇时,这两个栈才满了,溢出来了。
忘了交代一下,这两个栈的栈顶指针相加正好为MaxSize-1;有这个规律,相信你在操作的过程中就不会遇见很大的问题了。
下面提示部分代码为:将一个元素item插入第1或者第2个栈的方法;
int Push(int top[],int i,int item)
{
// 栈满了,插入失败,返回一个0;
if (top[0] == top[1] - 1)
{
return 0;
}
else
{
if (i == 1)
{
top[0] ++;
}
else
{
top[1] --;
}
stack[top[i - 1]] = item; // 插入元素item;
return 1; // 栈没满,插入成功;
}
}
// 删除操作同样地方法;
int Pop(int top[],int i,int& item)
{
if (i == 1)
{
if (top[0] == -1)
{
return 0; // 栈1为空,删除失败;
}
else
{
item = stack[top[0]--];
return 1;
}
}
else
{
if (top[1] == MaxSize)
{
return 0; // 栈2为空,删除失败,返回0;
}
else
{
item = stack[top[1]++];
return 1; // 栈2为非空,删除成功,返回1;
}
}
}
总结一下,这样的共享空间问题,估计是我很少遇到的。因为多个栈共享连续的空间优点很明显:节省空间。但是弊端很大,就是要移动大量的数据元素,这样也体现了顺序表固有的缺陷。不提倡。接下来看stack的链式实现吧。
共享空间可以解决一定的问题。
栈一 | 共享空间 | 栈二 |
忘了交代一下,这两个栈的栈顶指针相加正好为MaxSize-1;有这个规律,相信你在操作的过程中就不会遇见很大的问题了。
下面提示部分代码为:将一个元素item插入第1或者第2个栈的方法;
int Push(int top[],int i,int item)
{
// 栈满了,插入失败,返回一个0;
if (top[0] == top[1] - 1)
{
return 0;
}
else
{
if (i == 1)
{
top[0] ++;
}
else
{
top[1] --;
}
stack[top[i - 1]] = item; // 插入元素item;
return 1; // 栈没满,插入成功;
}
}
// 删除操作同样地方法;
int Pop(int top[],int i,int& item)
{
if (i == 1)
{
if (top[0] == -1)
{
return 0; // 栈1为空,删除失败;
}
else
{
item = stack[top[0]--];
return 1;
}
}
else
{
if (top[1] == MaxSize)
{
return 0; // 栈2为空,删除失败,返回0;
}
else
{
item = stack[top[1]++];
return 1; // 栈2为非空,删除成功,返回1;
}
}
}
总结一下,这样的共享空间问题,估计是我很少遇到的。因为多个栈共享连续的空间优点很明显:节省空间。但是弊端很大,就是要移动大量的数据元素,这样也体现了顺序表固有的缺陷。不提倡。接下来看stack的链式实现吧。
相关文章推荐
- 关于SQL中的两个问题的理解
- 关于Android 不居中的上下两个空间的宽度一致的问题
- V4L2中两个关于图像占用空间大小的结构体项的理解
- SIFT算法中关于高斯金字塔和尺度空间的问题理解
- 关于预编译头 protocol buffer 命名空间的问题
- 关于进程的4GB虚拟地址空间概念的理解
- 关于App在iTunes文件共享中无法显示的问题解决
- 关于解决安装ubuntu双系统中出现的不能识别磁盘分区、空闲空间变不可用问题
- 关于sprintf函数——两个格式输出问题
- java中if判断里关于两个Boolean值等号连接的理解
- 关于Uboot编译Makefile中有两个all目标的问题
- 关于Vista系统C盘空间不符问题
- 关于寻找两个字符串中最长子序列的问题
- 编程珠玑: 12章 取样问题 12.3设计空间,程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 -------解题总结
- 学习Java的第一步是安装好JDK,写一个Hello World, 其实JDK的学习没有那么简单,关于JDK有两个问题是很容易一直困扰Java程序员的地方:一个是CLASSPATH的问题,其实从原理上来说,是要搞清楚JRE的ClassLoader是如何加
- 关于SOA几个问题的理解
- 关于同一个dll被多个进程加载的共享问题
- java:关于short s1=1;s1=s1+1;short s1=1;s1+=1;short s3=s1+s2;中存在的简单数据类型转换问题的理解
- 关于对测试金字塔的理解收获共享
- [精彩] 关于LAN上有两个相同MAC地址的问题