1、栈的顺序存储结构,构造一个空栈; 2、入栈操作和出栈操作; 3、获取栈顶元素; 4、判断栈空; 5、求当前栈的长度; 6、利用上面栈的基本操作,编写出实现十进制正整数转换为对应的二进制、八进制和十六进制数的程序。C语言
时间: 2024-11-12 08:31:41 浏览: 33
栈是一种特殊的线性表,它遵循“先进后出”(Last In First Out, LIFO)的原则。我们可以使用数组或动态分配内存的方式实现顺序存储。
1. 构造一个空栈:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100 // 栈的最大容量
typedef struct {
int data[MAX_SIZE]; // 存储数据的数组
int top; // 栈顶指针
} Stack;
Stack* createEmptyStack() {
Stack *stack = (Stack*)malloc(sizeof(Stack));
stack->top = -1;
return stack;
}
```
2. 入栈(push)操作和出栈(pop)操作:
```c
void push(Stack *stack, int value) {
if(stack->top == MAX_SIZE - 1) {
printf("Stack overflow!\n");
return;
}
stack->data[++stack->top] = value;
}
int pop(Stack *stack) {
if(stack->top == -1) {
printf("Stack is empty.\n");
return -1;
}
return stack->data[stack->top--];
}
```
3. 获取栈顶元素(peek):
```c
int getTopElement(Stack *stack) {
if(stack->top == -1) {
printf("Stack is empty.\n");
return -1;
}
return stack->data[stack->top];
}
```
4. 判断栈是否为空:
```c
int isEmpty(Stack *stack) {
return stack->top == -1;
}
```
5. 求栈的长度(size):
```c
int size(Stack *stack) {
return stack->top + 1;
}
```
6. 将十进制转换为二进制、八进制和十六进制(这里仅给出基本思路,完整代码需要循环处理):
```c
// 示例函数,假设已有一个名为decimalToBinary(int decimal)的函数用于将十进制转二进制
void convertBase(Stack *decimalStack) {
while (!isEmpty(decimalStack)) {
int digit = pop(decimalStack);
char binary[8], octal[11], hexadecimal[16]; // 分别表示二进制、八进制和十六进制字符串
sprintf(binary, "%o", digit); // 二进制
sprintf(octal, "%o", digit); // 八进制,注意这里的-o选项会自动补零
sprintf(hexadecimal, "%x", digit); // 十六进制
printf("Binary: %s, Octal: %s, Hexadecimal: %s\n", binary, octal, hexadecimal);
}
}
```
阅读全文