用c语言请编写顺序栈的操作集,并且编程实现进制转换的函数
时间: 2024-10-23 14:08:19 浏览: 55
顺序栈、链栈将10进制转为2、8、16进制源码
5星 · 资源好评率100%
在C语言中,我们可以创建一个简单的顺序栈数据结构,包括基本的初始化、入栈(push)、出栈(pop)、查看栈顶元素(top)以及判断栈是否为空(is_empty)等操作。这里是一个基本的顺序栈实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈的结构体
typedef struct Stack {
int* data; // 存储元素的数组
int top; // 栈顶指针
int size; // 容量大小
} Stack;
// 初始化栈
Stack* stack_init() {
Stack* s = (Stack*)malloc(sizeof(Stack));
s->data = NULL;
s->top = -1;
s->size = 0;
return s;
}
// 判断栈是否为空
int is_empty(Stack* s) {
return s->top == -1;
}
// 入栈操作
void push(Stack* s, int value) {
if (s->top >= s->size - 1) {
s->size *= 2;
s->data = (int*)realloc(s->data, sizeof(int) * s->size);
}
s->data[++s->top] = value;
}
// 出栈操作
int pop(Stack* s) {
if (is_empty(s)) {
printf("Error: Stack is empty.\n");
return -1;
}
return s->data[s->top--];
}
// 查看栈顶元素
int peek(Stack* s) {
if (is_empty(s)) {
printf("Error: Stack is empty.\n");
return -1;
}
return s->data[s->top];
}
// 销毁栈并释放内存
void stack_destroy(Stack* s) {
free(s->data);
free(s);
}
// 示例:将十进制转换成二进制
int decimal_to_binary(int num) {
Stack binary_stack;
while (num > 0) {
push(&binary_stack, num % 2); // 取余数并入栈
num /= 2;
}
int result = 0;
while (!is_empty(&binary_stack)) {
result = result * 2 + pop(&binary_stack);
}
return result;
}
int main() {
Stack* stack = stack_init();
int decimal_num = 42;
printf("Binary representation of %d is %d\n", decimal_num, decimal_to_binary(decimal_num));
stack_destroy(stack);
return 0;
}
```
阅读全文