实现顺序栈的初始化、判断栈空、判断栈满、取栈顶元素、入栈和出栈操作 ,并用顺序栈实现十进制数到非十进制数的转换。用c语言
时间: 2024-10-06 07:01:55 浏览: 60
顺序栈入栈出栈实现源码
5星 · 资源好评率100%
在C语言中,我们可以使用数组来实现一个简单的顺序栈。首先,我们需要设置一些常量,如栈的最大容量和初始状态:
```c
#define MAX_STACK_SIZE 50 // 栈的最大容量
#define INITIAL_STATE -1 // 初始状态,表示栈为空
typedef struct {
int top; // 栈顶指针
int stack[MAX_STACK_SIZE]; // 存储栈元素
} Stack;
```
接下来,我们实现基本的栈操作:
1. 初始化(initStack()):
```c
void initStack(Stack *s) {
s->top = INITIAL_STATE;
}
```
2. 判断栈空(isEmpty()):
```c
int isEmpty(Stack *s) {
return (s->top == INITIAL_STATE);
}
```
3. 判断栈满(isFull()):
```c
int isFull(Stack *s) {
return (s->top >= MAX_STACK_SIZE - 1);
}
```
4. 取栈顶元素(pop()) (如果栈不空):
```c
int pop(Stack *s) {
if (!isEmpty(s)) {
int item = s->stack[s->top];
s->top--;
return item;
}
return -1; // 如果栈空,返回特殊值表示错误
}
```
5. 入栈(push()):
```c
void push(Stack *s, int value) {
if (!isFull(s)) {
s->stack[s->top++] = value;
} else {
printf("Stack is full.\n");
}
}
```
为了将十进制数转换成非十进制数(例如二进制或十六进制),我们可以先创建一个新的栈来存储中间结果,并利用循环和位操作。这里以二进制为例:
```c
void decimalToBinary(int decimal, Stack *binaryStack) {
while (decimal > 0) {
push(binaryStack, decimal % 2); // 将余数压入栈
decimal /= 2; // 更新decimal
}
}
// 示例:将十进制数10转为二进制
int decimalNum = 10;
Stack binaryStack;
initStack(&binaryStack);
decimalToBinary(decimalNum, &binaryStack);
```
记得在处理完转换后,需要遍历这个二进制栈来获取最终的结果。
阅读全文