数组共享双栈的实现

原创 2015年11月17日 17:23:06

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication2
{ //数组共享双栈
public class ShareDoubleStack{
public int top1{get;set;}//第一个栈,栈底,即是数组的起始
public int top2{get;set;}//第二个栈,栈底,即是数组的结束
public int maxsize { get; set; }//定义该共享栈的 大小
public string[] data { get; set; }//定义一个数组 来存放栈内的节点内容
///
/// 构造函数 初始化
///
/// 栈的数组的大小 【int】
public ShareDoubleStack(int maxsize) {
this.top1 = -1;
this.top2 = maxsize;
this.maxsize = maxsize;
this.data = new string[maxsize];
}
///
/// 根据指定的参数,入栈
///
/// 入栈的参数【string】
/// 指定入的栈的参数,1代表数组底的一栈,2代表数组顶的2栈
public void Push(string data , int satckNumber ) {
if (this.top1+1==this.top2)
{
return;
}
if (satckNumber==1)
{
this.data[++this.top1] = data;
}
else if (satckNumber==2)
{
// Console.WriteLine(“2栈添加”);
this.data[–this.top2] = data;

         }
     }
     /// <summary>
     /// 返回一个出栈的值
     /// </summary>
     /// <param name="satckNumber">指定出的栈的参数,1代表数组底的一栈,2代表数组顶的2栈<</param>
     /// <returns></returns>
     public string Pop(int satckNumber) {
         string d;
         if (satckNumber==1)
         {
             if (this.top1==-1)
                 return null;

             return d= this.data[this.top1--];
         }
        else if(satckNumber==2)
         {  

             if (this.top2==this.maxsize)
                 return null;

             return d = this.data[this.top2++];

         }else{
         return null;
         }
     }
      /// <summary>
     ///  根据指定的参数,显示所有的栈数据
      /// </summary>
     /// <param name="stackNumber">指定显示的栈的参数,1代表数组底的一栈,2代表数组顶的2栈</param>
     public void Show(int stackNumber) {
         if (stackNumber==1)
         {
             if (this.top1 == -1)
             {
                 Console.WriteLine("1栈为空");
                 return;
             }

             for (int i = this.top1; i >-1; i--)
             {
                 Console.WriteLine(data[i]);
             }
         }
         else if (stackNumber==2)
         {
             if (this.top2==this.maxsize)
             {
                 Console.WriteLine("2栈为空");
                 return;
             }
             for (int j = this.top2; j < this.maxsize; j++)
             {
                  Console.WriteLine(data[j]);
             }
         }


     }
 }

    //测试
    class Program
    {
        static void Main(string[] args)
        {

            ShareDoubleStack sds = new ShareDoubleStack(6);
            sds.Push("a",1);
            sds.Push("b", 1);
            sds.Push("c", 1);
            sds.Push("aa",2);
            sds.Push("bb",2);
            sds.Push("cc",2);
            sds.Show(1);
            sds.Show(2);

            Console.ReadKey();
        }
    }

}
版权声明:

实现双栈共享

一、实验要求和目的 要求:使用visual C++软件实现双栈共享数组,编写其POP&PUSH过程。要求输入1-100的整数,取3的整数倍压栈到S1,其余到栈S2,栈满后,再分别弹出到栈空,输出栈P...
  • qq_33901297
  • qq_33901297
  • 2016年10月15日 16:32
  • 335

用一个数组实现两个栈

题目:用一个数组实现两个栈 方案一:将数组的下标为0的位置当做第一个栈的栈底,下标为1的位置当做第二个栈的栈底,将数组的偶数位置看做第一个栈的存储空间,奇数位置看做第二个栈的存储空间。 方案二...
  • xyzbaihaiping
  • xyzbaihaiping
  • 2016年04月18日 23:56
  • 2939

实现数组双栈共享

将编号为0和1的两个栈放于一个数组空间V[m]中,栈底分别处于两数组的两端。 当第0号栈的栈顶指针top[0]等于-1时该栈为空,当第1号栈的栈顶指针top[1]等于m时.该栈为空。 两个栈均从两...
  • aaa791678470
  • aaa791678470
  • 2017年04月19日 11:49
  • 335

两栈共享存储空间(用一个数组存储两个栈)

#include #include //栈的顺序存储结构,用一维数组实现 #define OK 1 #define ERROR -1 #define TRUE 1 #defin...
  • keepupblw
  • keepupblw
  • 2014年05月14日 17:21
  • 3168

算法导论 顺序双向栈——两个栈共享同一存储空间

双向栈——两个栈共享同一存储空间1. 什么是双向栈? 算法导论原题: 10.1-2 Explain how to implement two stacks in one array A...
  • sinat_24229853
  • sinat_24229853
  • 2015年09月15日 17:57
  • 1253

两个栈共享同一存储空间

#include using namespace std; const int StackSize = 100; class BothStack { private: int data...
  • u010951938
  • u010951938
  • 2014年09月21日 22:04
  • 1021

双端队列(deque)数组实现

数据结构与算法分析——c语言描述 练习3.26 答案 很水的题。终于把第三章的课后习题答案写完了,还是有点小激动的。 deque.h typedef int ElementType;...
  • qq789045
  • qq789045
  • 2016年04月01日 12:43
  • 716

数据结构之---C语言实现共享栈

数据结构之---C语言实现共享栈
  • u012965373
  • u012965373
  • 2015年06月05日 11:28
  • 931

栈的实现——链表和数组

C语言(打印函数采用的c++): 栈的链表实现—— 栈的初始化(创建||清空)、入栈、出栈(获取栈顶元素) 栈的数组实现——初始化、入栈、出栈、清空栈 参考资料:《数据结构与算法分析...
  • a04081122
  • a04081122
  • 2016年07月21日 19:29
  • 780

顺序栈的实现和两栈共享空间

顺序栈的实现和两栈共享空间   一.顺序栈的实现             栈(stack)是限定仅在表尾进行插入或删除操作的线性表。我们把允许插入和删除的一端称为栈顶(top),另一...
  • zxf13598202302
  • zxf13598202302
  • 2015年11月07日 20:37
  • 1957
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数组共享双栈的实现
举报原因:
原因补充:

(最多只允许输入30个字)