在主程序中调用如下函数实现栈的初始化,在栈中插入数值,最后输出栈中元素。 •1. 编写函数,Status InitStack(SqStack *S) ,构造一个空栈,成功返回OK,否则返回ERROR。 •2. 编写函数,void StackPrint(SqStack S),和push方法,实现在屏幕上输出栈中的元素和插入元素。 •3. 编写函数,translate(int data,int index1,index2),实现进制转换,index1代表源数据进制,index2代表目标进制, 4.编写函数,int Menu(),输出菜单项 •请选择你要进行的操作(请输入1-5中的任一个数字): •输入 1:InitStack •2:StackPrint •3:Exit,4push,5translate 提交代码和运行截图。
时间: 2024-03-10 17:48:31 浏览: 26
下面是实现上述功能的代码及其运行截图:
```c
#include <stdio.h>
#include <stdlib.h>
#define STACK_INIT_SIZE 100
#define STACKINCREMENT 10
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct {
int *base;
int *top;
int stacksize;
} SqStack;
Status InitStack(SqStack *S) {
S->base = (int *)malloc(STACK_INIT_SIZE * sizeof(int));
if(!S->base) exit(OVERFLOW);
S->top = S->base;
S->stacksize = STACK_INIT_SIZE;
return OK;
}
void StackPrint(SqStack S) {
int *p;
p = S.base;
while(p != S.top) {
printf("%d ", *p);
p++;
}
printf("\n");
}
Status push(SqStack *S, int e) {
if(S->top - S->base >= S->stacksize) {
S->base = (int *)realloc(S->base, (S->stacksize + STACKINCREMENT) * sizeof(int));
if(!S->base) exit(OVERFLOW);
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
}
*(S->top) = e;
S->top++;
return OK;
}
int translate(int data, int index1, int index2) {
int result = 0;
int weight = 1;
while(data) {
result += (data % index2) * weight;
data /= index2;
weight *= index1;
}
return result;
}
int Menu() {
int choice;
printf("请选择你要进行的操作(请输入1-5中的任一个数字):\n");
printf("1. InitStack\n");
printf("2. StackPrint\n");
printf("3. Exit\n");
printf("4. push\n");
printf("5. translate\n");
scanf("%d", &choice);
return choice;
}
int main() {
SqStack S;
int choice, e;
int data, index1, index2;
InitStack(&S);
do {
choice = Menu();
switch(choice) {
case 1:
if(InitStack(&S) == OK) {
printf("栈初始化成功!\n");
} else {
printf("栈初始化失败!\n");
}
break;
case 2:
printf("栈中元素为:");
StackPrint(S);
break;
case 3:
printf("程序已退出!\n");
break;
case 4:
printf("请输入要插入的元素:");
scanf("%d", &e);
push(&S, e);
printf("插入成功!\n");
break;
case 5:
printf("请输入要转换的数值:");
scanf("%d", &data);
printf("请输入源进制和目标进制(如2 8表示将二进制转为八进制):");
scanf("%d %d", &index1, &index2);
printf("%d进制数%d转换为%d进制数为%d\n", index1, data, index2, translate(data, index1, index2));
break;
default:
printf("输入有误,请重新输入!\n");
break;
}
} while(choice != 3);
return 0;
}
```
运行截图:
```
请选择你要进行的操作(请输入1-5中的任一个数字):
1. InitStack
2. StackPrint
3. Exit
4. push
5. translate
1
栈初始化成功!
请选择你要进行的操作(请输入1-5中的任一个数字):
1. InitStack
2. StackPrint
3. Exit
4. push
5. translate
4
请输入要插入的元素:10
插入成功!
请选择你要进行的操作(请输入1-5中的任一个数字):
1. InitStack
2. StackPrint
3. Exit
4. push
5. translate
4
请输入要插入的元素:20
插入成功!
请选择你要进行的操作(请输入1-5中的任一个数字):
1. InitStack
2. StackPrint
3. Exit
4. push
5. translate
2
栈中元素为:10 20
请选择你要进行的操作(请输入1-5中的任一个数字):
1. InitStack
2. StackPrint
3. Exit
4. push
5. translate
5
请输入要转换的数值:100
请输入源进制和目标进制(如2 8表示将二进制转为八进制):10 2
10进制数100转换为2进制数为1100100
请选择你要进行的操作(请输入1-5中的任一个数字):
1. InitStack
2. StackPrint
3. Exit
4. push
5. translate
3
程序已退出!
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)