首页 > 其他分享 >C实现顺序栈各功能

C实现顺序栈各功能

时间:2023-01-18 15:35:10浏览次数:41  
标签:ps 功能 顺序 return 实现 top else int printf

VS调试的程序,scanf_s会报错。代码加上#define _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0
#define MAXSIZE 100
#define _CRT_SECURE_NO_WARNINGS 1

typedef int ElemType;
typedef struct
{
    ElemType* base;
    ElemType* top;
    int Length;
} SequenceStack;
//定义栈

int InitStack(SequenceStack* ps)
{
    ps->base = (int*)malloc(MAXSIZE * sizeof(int));
    if (!ps->base)
        return ERROR;
    ps->top = ps->base;
    ps->Length = MAXSIZE;
    return OK;
}
//初始化栈

int EmptyStack(SequenceStack* ps)
{
    if (ps->base == ps->top)
    {
        return OK;
    }
    else
    {
        return ERROR;
    }
}//判断栈是否为空

int GetHead(SequenceStack ps, ElemType* e)
{
    if (ps.base == ps.top)
    {
        return ERROR;
    }
    else
    {
        e = --ps.top;
        return *e;
    }
}//获取栈顶元素

int StackLength(SequenceStack ps, ElemType* len)
{
    if (ps.base == ps.top)
    {
        *len = 0;
        return OK;
    }
    else
    {
        *len = 1;
        while (--ps.top != ps.base)
        {
            *len = *len + 1;
            printf("----");
            printf("\n");
        }
        return OK;
    }
}//获取栈的长度

int StackPop(SequenceStack* ps)
{

    if (ps->top == ps->base)
    {
        return ERROR;
    }
    int e = 0;

    while (--ps->top != ps->base || ps->top == ps->base)
    {

        e = *ps->top;
        printf("%d\n", e);
        if (ps->top == ps->base)
            return OK;
    }
}//将栈中元素依次出栈并输出

int Push(SequenceStack* ps, ElemType e)
{
    if (ps->top - ps->base == MAXSIZE)
    {
        return ERROR;
    }
    *ps->top++ = e;

    return OK;
}

int Pop(SequenceStack* ps)
{
    if (*ps->base == *ps->top)
    {
        return ERROR;
    }
    else
    {
        --ps->top;
    }
    return OK;
}



int ten_eight(SequenceStack* ps, ElemType n)
{
    int t, i = 1;
    t = n % 8;
    *ps->top++ = t;
    n = n / 8;
    while (n > 8)
    {
        if (n > 8)
        {
            t = n % 8;
            *ps->top++ = t;
            i++;
            n = n / 8;
        }
        else
        {
            break;
        }
    }
    *ps->top++ = n;
    while (i >= 0)
    {
        printf("%d", *--ps->top);
        i--;
    }
    printf("\n");
    return OK;
}//进制转化

int main()
{
    SequenceStack stack;
    int status, head, temp, len = 0, num, e,ten;
    InitStack(&stack);

    while (1)
    {
        printf("%-18s\n", "************************");
        printf("%-18s", "0、输入零退出程序。");
        printf("%5s\n", "*");
        printf("%-18s", "1、判断栈是否为空。");
        printf("%5s\n", "*");
        printf("%-18s", "2、获取栈的头元素。");
        printf("%5s\n", "*");
        printf("%-18s", "3、获取此栈的长度。");
        printf("%5s\n", "*");
        printf("%-18s", "4、栈元素依次弹出。");
        printf("%5s\n", "*");
        printf("%-18s", "5、实现十转八进制。");
        printf("%5s\n", "*");
        printf("%-18s", "6、将元素压入栈中。");
        printf("%5s\n", "*");
        printf("%-18s", "7、将元素弹出此栈。");
        printf("%5s\n", "*");
        printf("%-18s\n", "************************");

        printf("你的选择:");
        scanf("%d", &num);
        printf("\n");
        if (num == 0)
        {
            break;
        }
        else if (num == 1)
        {
            if (EmptyStack(&stack))
            {
                printf("当前栈为空!\n");
                continue;
            }
            else
            {
                printf("当前栈不为空!\n");
                continue;
            }
        }
        else if (num == 2)
        {
            head = GetHead(stack, &temp);
            if (head)
            {
                printf("当前头元素为:%d\n", head);
                continue;
            }
            else
            {
                printf("当前栈为空!\n");
                continue;
            }
        }
        else if (num == 3)
        {
            StackLength(stack, &len);
            if (len)
            {
                printf("当前栈的长度为%d\n", len);
                continue;
            }
            else
            {
                printf("当前栈为空!\n");
                continue;
            }
        }
        else if (num == 4) {
            StackPop(&stack);
            continue;
        }
        else if (num == 5)
        {
            scanf("%d", &ten);
            ten_eight(&stack,ten);
            continue;
        }
        else if (num == 6)
        {
            printf("你要压入栈中的数:");
            scanf("%d", &e);
            if (Push(&stack, e))
            {
                printf("入栈成功!\n");
                continue;
            }
            else
            {
                printf("当前栈满!\n");
                continue;
            }
        }
        else if (num == 7)
        {
            if (Pop(&stack))
            {
                printf("出栈成功!\n");
                continue;
            }
            else
            {
                printf("当前栈为空!\n");
                continue;
            }
        }
    }
}

标签:ps,功能,顺序,return,实现,top,else,int,printf
From: https://www.cnblogs.com/qianyuzz/p/17059912.html

相关文章

  • 顺序栈实现栈的各种功能
    #include<iostream>#defineOK1#defineERROR0#defineMAXSIZE100typedefintElemType;typede......
  • 顺序链表
    #include<iostream>#defineMAXSIZE100#defineERROR0#defineOK1usingnamespacestd;typedefstruct{ int*elem; in......
  • 应用笔记 | 如何利用TSMaster的系统变量触发标定和诊断功能?
    随着电子模块的迅速增加,ADAS、无人驾驶场景带来的海量数据交互和实时性要求,OTA技术带来的信息安全挑战,对汽车总线仿真、测试、诊断、标定工具链的性能提出了更高的要求。本......
  • Servlet12 - 实现编辑和修改
    1.点击水果名称跳转到编辑相应水果信息的页面主页中设置跳转超链接<td><ath:text="${fruit.fname}"th:href="@{/edit.do(fid=${fruit.fid})}">苹果</a></td>......
  • Servlet13 - 实现删除和添加
    3.点击删除按钮从数据库中删除数据点击按钮调用js中的delFruit(fid)方法,需要传入fid调用js中的方法以及传入参数的thymeleaf语法<!--方法1字符串拼接......
  • 在不使用cv2等库的情况下利用numpy实现双线性插值缩放图像
    起因我看到了一个别人的作业,他们老师让不使用cv2等图像处理库缩放图像算法介绍如果你仔细看过一些库里缩放图像的方法参数会发现有很多可选项,其中一般默认是使用双线性......
  • redux7.x基本实现记录
    1、下载相关依赖npmireact-redux@7.1.0redux@4.0.1redux-actions@2.6.5redux-thunk@2.2.0redux-logger@3.0.6redux-devtools-extension@2.13.8@types/react-re......
  • vcu整车simulink应用层模型 模型包含高压上下电,车辆蠕动,驻坡功能,能量管理
    vcu整车simulink应用层模型模型包含高压上下电,车辆蠕动,驻坡功能,能量管理,档位管理,续航里程,定速巡航等等。每个功能都对应有详细的pdf文档详细说明,进入条件,退出条件,以及标定......
  • 五 docker安全 & 底层实现
    docker的安全主要有三个方面,内核的namespace和控制组机制提供的容器内在安全,程序本身的安全,内核的加强机制内核命名空间通过dockerrun启动一个容器时,在后台docker为......
  • Springboot:aop注解实现
    概念Aop原指面向切面编程。但在spring中对aop的实现指的是:对方法执行前后加入其它逻辑代码,达到增强方法的目的spring-aop的底层实现一般实现aop,有两种方案:JDK动态......