• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言实现两栈空间共享

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一个同学让我改一段两栈共享的C语言代码,实现进栈、出栈、输出栈里元素的功能。

代码如下:

#include <stdio.h>
#include <stdlib.h> 
#define MaxSize 100  
typedef int     ElemType;
typedef int     Status;

typedef struct {
    ElemType    data[MaxSize];
    int         top1;
    int         top2;
}Stack, *pStack;

//初始化   
Status InitStack(pStack S)
{
    S->top1 = -1;
    S->top2 = MaxSize;
    return 1;
}

//入栈函数   
Status Push_Stack(pStack S, ElemType e, int stackNumber)
{  
    if (S->top1 + 1 == S->top2)
        return 0;
    switch (stackNumber)
    {
    case 1:     S->data[++S->top1] = e;       break;
    case 2:     S->data[--S->top2] = e;       break;
    }
    return 1;
}

//出栈函数 
Status Pop_Stack(pStack S, ElemType *e, int stackNumber)
{
    if (1 == stackNumber)
    {   //判断栈是否为空   
        if (-1 == S->top1)
            return 0;
        *e = S->data[--S->top1];
    }
    else if (2 == stackNumber)
    {
        if (MaxSize == S->top2)
            return 0;
        *e = S->data[++S->top2];
        printf("出栈的元素为:%d\n",*e);
    }
    return 1;
}

//输出栈中的元素 
Status DispStack(pStack S, int stackNumber)
{
    int i;
    if (1 == stackNumber)
    {
        if (-1 == S->top1){
            printf("栈为空!\n");
            return 0;
        }
        printf("栈1中的元素为:");
        for (i = 0; i <= S->top1; i++)
            printf("%d ", S->data[i]);
        printf("\n");
        printf("栈顶元素为:%d\n", S->data[S->top1]);
    }
    else if (2 == stackNumber)
    {
        if (MaxSize == S->top2){
            printf("栈为空!\n");
            return 0;
        }
        printf("栈2中的元素为:");
        for (i = MaxSize - 1; i >= S->top2; i--)
            printf("%d ", S->data[i]);
        printf("\n");
        printf("栈顶元素为:%d\n", S->data[S->top2]);
    }
}


int main(void)
{
    Stack S;
    ElemType e;
    int n;
    int tmp;
    InitStack(&S);
    for (;;){
        printf("请选择要输入哪个栈中的元素 1或2,退出输入请输入3:\n");
        //Visual C++ 2012 使用了更加安全的 run-time library routines 。新的Security CRT functions(就是那些带有“_s”后缀的函数)
        scanf_s("%d", &n);
        if (3 == n)
        {
            break;
        }
        else if(1!=n && 2!=n){
            printf("输入错别选项!请选择要输入哪个栈中的元素 1或2,退出输入请输入3:\n");
        }
        printf("请输入元素值:\n");
        scanf_s("%d", &tmp);
        
        if (1 == n || 2 == n)
        {
            if (0 == Push_Stack(&S, tmp, n)){
                printf("栈已满,不能再添加元素!\n");
                break;
            }
        }
        
    }

    while (true){
    printf("请选择要输出哪个栈中的元素 1或2:\n");
    scanf_s("%d", &n);
    if (n == 1)
    {
        DispStack(&S, 1);
        break;
    }
    else if (n == 2)
    {
        DispStack(&S, 2);
        break;
    }
    else{
        printf("输入错误选项!\n");
    }
    }
    system("pause");
    return 0;
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C11简洁之道:函数绑定发布时间:2022-07-14
下一篇:
asp.netC#获取程序文件相关信息发布时间:2022-07-14
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap