小白的数据结构代码实战(6)----共享栈

本文探讨了如何通过栈1和栈2构建共享栈,其中栈1底部作为共享栈起点,栈2底部作为终点。当栈1的栈顶指针加1等于栈2的栈顶指针时,标志着共享栈已满。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

共享栈=栈1+栈2

栈1的栈底为共享栈的首,栈2的栈底为共享栈的尾

共享栈满:S->top1+1==S->top2

//Author:张佳琪
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 80
#define ERROR 0
#define OK 1
#define TRUE 1
#define FALSE 0
typedef int ElemType;
typedef int Status;
typedef struct
{
    ElemType data[MAXSIZE];
    int top1;
    int top2;
}Stack;
Status init(Stack *S)
{
    S->top1=-1;
    S->top2=MAXSIZE;
    return OK;
}
Status push(Stack *S,ElemType e,int stacknumber)
{
    if(S->top1+1==S->top2)
        return ERROR;
    if(stacknumber==1)
    {
        S->data[++S->top1]=e;
    }
    else if(stacknumber==2)
    {
        S->data[--S->top2]=e;
    }
    return OK;
}
Status pop(Stack *S,ElemType *e,int stacknumber)
{
    if(stacknumber==1)
    {
        if(S->top1==-1)
            return ERROR;
        *e=S->data[S->top1--];
    }
    else if(stacknumber==2)
    {
        if(S->top2==MAXSIZE)
            return ERROR;
        *e=S->data[S->top2++];
    }
    return OK;
}
Status show(Stack *S,int stacknumber)
{
    int i;
    if(stacknumber==1)
    {
        if(S->top1==-1)
            return ERROR;
        printf("栈1:");
        for(i=0;i<=S->top1;i++)
            printf("%d ",S->data[i]);
        printf("\n=================\n");
    }
    else if(stacknumber==2)
    {
        if(S->top2==MAXSIZE)
            return ERROR;
        printf("栈2:");
        for(i=MAXSIZE-1;i>=S->top2;i--)
            printf("%d ",S->data[i]);
        printf("\n=================\n");
    }
    return OK;
}
int main()
{
    Stack S;
    ElemType x;
    int i;
    while(1)
    {
        printf("=====menu=====\n");
        printf("1.初始化\n");
        printf("2.入栈\n");
        printf("3.出栈\n");
        printf("4.输出\n");
        printf("输入1-4:");
        scanf("%d",&i);
        switch(i)
        {
        case 1:
            {
                if(init(&S))
                    printf("完成!\n");
                else
                    printf("失败!\n");
                break;
            }
        case 2:
            {
                printf("栈1还是栈2:");
                scanf("%d",&i);
                printf("输入数据:");
                scanf("%d",&x);
                push(&S,x,i);
                break;
            }
        case 3:
            {
                printf("栈1还是栈2:");
                scanf("%d",&i);
                pop(&S,&x,i);
                printf("%d\n",x);
                break;
            }
        case 4:
            {
                printf("栈1还是栈2:");
                scanf("%d",&i);
                show(&S,i);
                break;
            }
    }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值