两栈共享空间

/*
两栈共享空间
*/

//存储结构定义

const int StackSize = 10;
typedef int DataType;
typedef struct
{
    DataType data[StackSize];
    int top1,top2;            //分别为各自栈顶元素在数组中的下标
}BothStack;

//入栈操作

void Push(BothStack &S,int i,DataType x)
{
    if(S.top1 == S.top2 - 1)
    {
        printf("下溢");
        exit(-1);            //判断是否栈满
    }
    if(i == 1)
        S.data[++S.top1] = x;        //在栈1插入
    if(i == 2)
        S.data[--S.top2] = x;        //在栈2插入
}

//出栈操作:当top1指向-1时,栈1为空,当top2指向StackSize时栈2为空,当从栈2删除元素,栈顶指针top2加1

DataType Pop(BothStack &S,int i)
{
    if(i == 1){
        if(S.top1 == 1)
        {
            printf("下溢");
            exit(-1);
        }
        return S.data[S.top1--];
    }
    if(i == 2){
        if(S.top2 == StackSize)
        {
            printf("下溢");
            exit(-1);
        }
        return S.data[S.top2++];        
    }
}
共享,也称为共用或双端队列(deque),它的原理在于在一个数据结构中同时提供的功能(后进先出,LIFO)以及队列的功能(先进先出,FIFO)。通过共享内存区域,顶和队尾可以在同一个位置进行操作,这样可以节省存储空间。这种方式常用于需要频繁在顶和队尾之间切换的场景。 以下是使用Python实现一个简单的共享的例子,这里我们使用列表作为基础数据结构: ```python class SharedStack: def __init__(self): self.stack = [] self.queue = [] # 对于的操作 def push(self, item): self.stack.append(item) def pop(self): if not self.is_empty(): return self.stack.pop() else: while not self.is_empty(): self.queue.append(self.stack.pop()) return self.queue.pop(0) # 队首出队,模拟弹出 # 对于队列的操作 def enqueue(self, item): self.queue.append(item) def dequeue(self): if not self.is_empty(): if len(self.stack) == len(self.queue): # 如果为空,则直接从队列出队 return self.queue.pop(0) else: return self.queue.pop() # 否则正常队列操作 def is_empty(self): return not (self.stack or self.queue) # 示例 shared_stack = SharedStack() shared_stack.push(1) # 入 shared_stack.enqueue(2) # 入队 print(shared_stack.dequeue()) # 输出1,队首出队 print(shared_stack.pop()) # 输出2,顶出 ``` 这个共享实现了基本的`push`, `pop`, `enqueue`, 和 `dequeue`操作,虽然并不是所有的操作都能保持传统的行为,但在特定场景下,它可以有效地减少内存占用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值