2.先定义一个字符类型的单链栈,然后编写出实现进栈、出栈、显示栈顶元素的函数, 最后使用字符栈来编写一个十——二进制数转换的算法
时间: 2024-10-21 10:05:24 浏览: 24
首先,我们需要创建一个字符类型的单链栈结构。单链栈通常包含两个部分:栈顶节点(top),用于存储当前栈顶的元素,以及一个指向下一个空位置的指针(pointer)。我们可以定义一个结构体,如`char StackElement`,里面包含一个字符数据和一个指向下一个元素的指针。
```c
typedef struct {
char data;
struct StackElement* next;
} StackElement;
StackElement* top = NULL; // 初始化栈顶为空
```
接下来,我们分别编写实现进栈(push)、出栈(pop)和显示栈顶元素(peek)的函数:
1. 进栈函数(Push):
- 如果栈为空,则新建一个栈元素并设置为新的栈顶;
- 否则,直接将新元素插入到现有栈顶的next位置。
```c
void push(char c) {
StackElement* newNode = (StackElement*)malloc(sizeof(StackElement));
newNode->data = c;
newNode->next = top;
top = newNode;
}
```
2. 出栈函数(Pop):
- 检查是否为空,若为空则返回错误或抛出异常;
- 否则,弹出栈顶元素,并更新栈顶指针。
```c
char pop() {
if (top == NULL) {
return '\0'; // 返回空字符表示栈空
}
char result = top->data;
StackElement* temp = top;
top = top->next;
free(temp); // 释放已使用的内存
return result;
}
```
3. 显示栈顶元素(Peek):
- 类似于出栈,但不真正移除元素,仅查看栈顶。
```c
char peek() {
if (top == NULL) {
return '\0';
}
return top->data;
}
```
最后,为了实现十进制转二进制的算法,可以设计一个主函数,读取用户输入的数字,然后依次将其转换成对应的二进制字符,利用栈来保存每一位的值。当处理完所有位后,再从栈中逐个取出元素,拼接成最终的二进制字符串。
```c
void decimalToBinary(int num) {
while (num > 0) {
push((char)(num % 2 + '0')); // 把余数转换为字符并入栈
num /= 2;
}
printf("二进制:"); // 输出结果前缀
while (!isEmpty()) {
printf("%c", pop());
}
}
// 判断栈是否为空
bool isEmpty() {
return top == NULL;
}
```
阅读全文