栈实验(实现对于输入的任意一个非负十进制整数打印输出与其等值的八进制数功能)

实验目的

  通过本次实验,掌握栈的应用,了解栈的特点及适用范围。

实验原理及内容

(1)认真复习栈的基本概念与基本操作,实现栈的各项基本功能。
(2)实现对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数功能。
(3)设计一个菜单操作上述功能。

实验步骤及结果

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

#define MAX_SIZE 100

typedef struct {
    int items[MAX_SIZE];
    int top;
} Stack;

void initializeStack(Stack *s) {
    s->top = -1;
}

int isStackEmpty(Stack *s) {
    return s->top == -1;
}

int isStackFull(Stack *s) {
    return s->top == MAX_SIZE - 1;
}

void push(Stack *s, int item) {
    if (isStackFull(s)) {
        printf("栈已满,无法添加新元素。\n");
    } else {
        s->items[++s->top] = item;
    }
}

int pop(Stack *s) {
    if (isStackEmpty(s)) {
        printf("栈为空,无法移除元素。\n");
        return -1; // 返回一个错误值
    } else {
        return s->items[s->top--];
    }
}

int peek(Stack *s) {
    if (isStackEmpty(s)) {
        printf("栈为空。\n");
        return -1; // 返回一个错误值
    } else {
        return s->items[s->top];
    }
}

int stackSize(Stack *s) {
    return s->top + 1;
}

#include <math.h>

void decimalToOctal(int decimal) {
    int octal = 0, remainder, i = 1;

    while (decimal > 0) {
        remainder = decimal % 8;
        octal += remainder * i;
        decimal /= 8;
        i *= 10;
    }

    printf("八进制数为: %d\n", octal);
}

int main() {
    Stack stack;
    initializeStack(&stack);
    int choice, decimalNumber;

    while (1) {
        printf("\n菜单:\n");
        printf("1. 栈操作\n");
        printf("2. 十进制转八进制\n");
        printf("3. 退出\n");
        printf("请选择一个操作:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                // 栈操作菜单
                printf("\n栈操作子菜单:\n");
                printf("1. 添加元素\n");
                printf("2. 移除元素\n");
                printf("3. 查看栈顶元素\n");
                printf("4. 检查栈是否为空\n");
                printf("5. 返回主菜单\n");
                printf("请选择一个操作:");
                scanf("%d", &choice);

                switch (choice) {
                    case 1:
                        printf("请输入要添加的整数:");
                        scanf("%d", &decimalNumber);
                        push(&stack, decimalNumber);
                        break;
                    case 2:
                        printf("移除的元素是:%d\n", pop(&stack));
                        break;
                    case 3:
                        printf("栈顶元素是:%d\n", peek(&stack));
                        break;
                    case 4:
                        if (isStackEmpty(&stack)) {
                            printf("栈为空。\n");
                        } else {
                            printf("栈不为空。\n");
                        }
                        break;
                    case 5:
                        return 0; // 返回主菜单
                    default:
                        printf("无效的选项,请重新选择。\n");
                        break;
                }
                break;
            case 2:
                printf("请输入一个非负十进制整数:");
                scanf("%d", &decimalNumber);
                decimalToOctal(decimalNumber);
                break;
            case 3:
                printf("感谢使用,再见!\n");
                exit(0); // 退出程序
            default:
                printf("无效的选项,请重新选择。\n");
                break;
        }
    }
}

结语

  在上述C语言程序的实现中,我们讨论了栈的基本操作和十进制转八进制的功能,并通过一个简单的菜单系统来操作这些功能。栈是一种后进先出的数据结构,这意味着最后添加到栈中的元素将是第一个被移除的。在我们的程序中,通过push和pop操作,我们可以清楚地观察到这一现象。

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值