共享栈

作者: 又是一只小白鼠 | 来源:发表于2020-04-08 22:04 被阅读0次

利用栈底为止相对不变的特性,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸。

stack.png
//
//  sharestack.c
//  Ccode
//
//  Created by XX on 2020/4/8.
//  Copyright © 2020 XX. All rights reserved.
//

#include "sharestack.h"
#include <stdlib.h>
#define MAX 

#define MaxSize 5//定义栈中元素的最大个数
typedef int ElemType;
typedef struct shareStack {
    ElemType data[MaxSize];
    int top0;
    int top1;
}shareStack, *pshare;


pshare CreateShare() {
    pshare p = (shareStack *)malloc(sizeof(shareStack));
    p->top0 = -1;
    p->top1 = MaxSize;
    return p;
}

//判空
int EmptyShare(pshare p) {
    if (p->top0 == -1 && p->top1 == MaxSize) {
        return 0;
    }
    return -1;
}

//入栈
int PushShare(pshare p, ElemType data, int stackNum) {
    if (p == NULL) {
        exit(-1);
    }
    if (p->top0 + 1 == p->top1) {
        printf("栈满...\n");
        return 0;
    }
    switch (stackNum) {
        case 0:
            p->top0 ++;
            p->data[p->top0] = data;
            return 0;
        case 1:
            p->top1 --;
            p->data[p->top1] = data;
            return 0;
            
        default:
            return -1;
    }
}

//出栈
int PopShare(pshare p, int stackNum) {
    int data;
    if (p == NULL) {
        exit(-1);
    }
    if (p->top0 == -1 && p->top1 == MaxSize) {
        return -1;
    }
    switch (stackNum) {
        case 0:
            data = p->data[p->top0];
            p->top0 --;
            return data;
        case 1:
            data = p->data[p->top1];
            p->top1 ++;
            return data;
        default:
            return -1;
    }
}


void testshare() {
    int data;
    shareStack s;
    pshare top = &s;
    top = CreateShare();
    PushShare(top, 23, 0);
    PushShare(top, 23, 0);
    PushShare(top, 78, 0);
    PushShare(top, 23, 1);
    PushShare(top, 45, 1);
    PushShare(top, 34, 0);
    data = PopShare(top, 0);
    printf("%d\n", data);
}

相关文章

  • [libco] 协程栈空间

    协程“栈”空间,有独立栈和共享栈,重点理解一下协程共享栈。 文章来源:[libco] 协程栈空间[https://...

  • 顺序栈两栈共享及实现

    两栈共享 顺序栈的两栈共享是指两个栈共享一个数组。 两个栈的栈底分别为0和length-1。当top[0]+1=t...

  • 顺序存储结构栈 共享栈 链式存储结构栈

  • 共享栈

    利用栈底为止相对不变的特性,可让两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向...

  • 大话数据结构—两栈共享空间(五)

    1.两栈共享空间

  • 栈的扩展

    共享栈 两个栈 共享一片存储空间 栈s1 需要存6个 而栈s2 只需要存1个 栈s2 有多余的存储空间 但是它不需...

  • 2018-01-03三题

    1.堆内存和栈内存的区别是什么? 线程的堆内存空间是共享的,栈内存空间才是独立的(堆共享,栈独立)。 2.wait...

  • 栈系列之-共享栈

    一、共享栈的原理 如果栈使用顺序存储的方式来实现,那么一开始就需要分配合适的大小,如果插入的数据超过栈的大小,就溢...

  • 数据结构的各种代码

    第 02 章 线性表 顺序存储结构 链式存储结构 第 03 章 栈与队列 顺序栈 链栈 两栈共享空间 循环队列 链...

  • 栈(两栈共享空间结构)

    栈:限定只能在表尾进行插入和删除的线性表。 两栈共享空间结构:使用数组同时实现两个栈,即栈1和栈2;栈1为空时,栈...

网友评论

      本文标题:共享栈

      本文链接:https://www.haomeiwen.com/subject/eyzxmhtx.html