请提供C语言中顺序栈数据结构的完整操作集(包括入栈、出栈和检查栈顶元素),以及一个用于二进制到十进制或反之的转换函数的具体编程实现代码。
时间: 2024-12-14 08:25:38 浏览: 14
在C语言中,我们可以创建一个简单的顺序栈(基于数组实现)来支持基本的操作,如入栈(push)、出栈(pop)和查看栈顶元素(top)。这里是一个基本的数据结构和函数实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈的最大容量
#define MAX_STACK_SIZE 50
// 定义栈结构体
typedef struct {
int stack[MAX_STACK_SIZE]; // 存储元素的数组
int top; // 栈顶指针
} Stack;
// 初始化栈
void init(Stack *s) {
s->top = -1;
}
// 判断栈是否为空
int isEmpty(Stack *s) {
return (s->top == -1);
}
// 判断栈是否已满
int isFull(Stack *s) {
return (s->top == MAX_STACK_SIZE - 1);
}
// 入栈操作
void push(Stack *s, int value) {
if (!isFull(s)) {
s->stack[++(s->top)] = value;
printf("元素 %d 入栈\n", value);
} else {
printf("栈已满,无法入栈\n");
}
}
// 出栈操作
int pop(Stack *s) {
if (!isEmpty(s)) {
return s->stack[s->top--];
} else {
printf("栈为空,无法出栈\n");
return -1; // 返回值表示错误
}
}
// 查看栈顶元素
int peek(Stack *s) {
if (!isEmpty(s)) {
return s->stack[s->top];
} else {
printf("栈为空,无栈顶元素\n");
return -1; // 返回值表示错误
}
}
// 示例:将二进制数转换为十进制
int binaryToDecimal(int binary) {
int decimal = 0, remainder, i = 0;
while (binary != 0) {
remainder = binary % 10;
decimal += remainder * pow(2, i);
binary /= 10;
i++;
}
return decimal;
}
// 示例:将十进制数转换为二进制
int decimalToBinary(int decimal) {
if (decimal >= 0 && decimal < 1 << 31) {
unsigned int binary = 0;
for (int i = 0; i < 32; i++) {
binary |= (decimal & 1) << i;
decimal >>= 1;
}
return binary;
} else {
printf("输入的十进制数值超出范围\n");
return -1;
}
}
int main() {
Stack s;
init(&s);
// 示例操作
push(&s, 10); // 入栈
printf("栈顶元素:%d\n", peek(&s)); // 查看栈顶
push(&s, 5); // 再次入栈
printf("%d 出栈后,栈顶元素:%d\n", pop(&s), peek(&s));
// 二进制转换示例
int binaryNum = 1010;
int decimalNum = binaryToDecimal(binaryNum);
printf("二进制 %d 转换成十进制是:%d\n", binaryNum, decimalNum);
return 0;
}
```
这个代码实现了顺序栈的基本操作和两个基础的数字转换函数。注意,这个例子并没有处理异常边界情况,实际项目中需要对输入进行有效性检查。
阅读全文