栈
实验目的
通过本次实验,掌握栈的应用,了解栈的特点及适用范围。
实验原理及内容
(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操作,我们可以清楚地观察到这一现象。
![](https://i-blog.csdnimg.cn/direct/ab8d853445124e958847221b5f6188c7.jpeg)