编写C程序,实现顺序栈的下列功能: 

1 设计一个虚拟界面,让用户选择操作(根据提示输入数据)

2 采用模块化编程思想,编写main函数和若干子函数(实现功能)

3 栈的基本功能有:创建栈、判断是否为空,是否为满,入栈,出栈,取出栈顶元素。

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int status;
typedef struct {
    int* base;
    int* top;
    int stacksize;
}SqStack;
status InitStack(SqStack& s) {
    s.base = new int[MAXSIZE];
    if (!s.base) exit(OVERFLOW);
    s.top = s.base;
    s.stacksize = 3;
    return OK;
}
status Push(SqStack& s, int e) {
    if (s.top - s.base == s.stacksize) return ERROR;
    *s.top = e;
    s.top++;
    return OK;
}

status Pop(SqStack& s, int& e) {
    if (s.top == s.base) return ERROR;
    s.top--;
    e = *s.top;
    return OK;
}
int GetTop(SqStack s) {
    if (s.top != s.base) return *(s.top - 1);
}
status IsEmpty(SqStack s) {
    if (s.top == s.base) return 1;
    else return 0;
}
int FullStack(SqStack s) {
    if (s.top - s.base == s.stacksize) {
        return OK;
    }
    else {
        return -1;
    }
}
status StackShow(SqStack s) {
    if (s.top == s.base) { return ERROR; }
    else {
        int* p = s.base;
        while (p != s.top) {
            printf("\t%d", *p);
            p++;
        }
        printf("\n");
        return OK;
    }

}
void menu() {

    printf("************************************************************************************************\n");
    printf("\t\t\t\t欢迎进入顺序栈操作界面\n");
    printf("请从键盘输入数字,完成对应的操作(1到7为有效操作,输入其他退出程序)\n");
    printf("\t\t1.初始化顺序栈\n");
    printf("\t\t2.判断栈是否为空\n");
    printf("\t\t3.判断栈是否为满\n");
    printf("\t\t4.入栈\n");
    printf("\t\t5.出栈\n");
    printf("\t\t6.取栈顶元素\n");
    printf("\t\t7.输出该顺序栈\n");
    printf("************************************************************************************************\n");
}


void main() {
    menu();
    int flag = 1;
    int num = 0;
    int n = 0;

    int e = 0;
    SqStack s;
    while (flag)
    {
        printf("\n您选择的操作是:");
        scanf_s("%d", &num);
        switch (num) {
        case 1:
            n = InitStack(s);
            if (n) {
                printf("\n初始化成功");
            }
            else {
                printf("\n初始化失败");
            }
            break;
        case 2:
            n = IsEmpty(s);
            if (n) {
                printf("\n栈空");
            }
            else {
                printf("\n栈不为空");
            }
            break;
        case 3:
            n = FullStack(s);
            if (n == 1) {
                printf("\n栈满");
            }
            else {
                printf("\n栈未满");
            }
            break;
        case 4:
            printf("\n请输入需要入栈的值");
            scanf_s("%d", &e);
            n = Push(s, e);
            if (n) {
                printf("入栈成功\n");
            }
            else {
                printf("入栈失败\n");
            }

            break;
        case 5:
            e = 0;
            n = Pop(s, e);
            if (n) {
                printf("出栈成功,出栈值为%d\n", e);
            }
            else {
                printf("出栈失败\n");
            }
            break;
        case 6:
            n = GetTop(s);
            printf("取出栈顶元素成功,值为%d", n);
            break;
        case 7:
            StackShow(s);
            break;
        default:
            printf("退出程序");
            flag = 0;
        }
    }
}

原文地址:http://www.cnblogs.com/smartlearn/p/16882933.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性