C语言实现栈(Stack)及进制转换

本文提供一个基于C语言顺序存储结构的栈(Stack)实现,包含以下功能:

  • 初始化栈
  • 入栈 (push)
  • 出栈 (pop)
  • 判断栈是否为空 (IsEmpty)
  • 判断栈是否为满 (IsFull)
  • 获取栈顶元素 (gettop)

此外,我们还将演示如何使用该栈实现十进制到二进制、八进制、十六进制的转换。

代码实现

#include <stdio.h>
#include <stdlib.h>

#define MAX_SIZE 100

typedef struct {
    int* data;
    int top;
} Stack;

// 初始化栈
void init(Stack* stack) {
    stack->data = (int*)malloc(MAX_SIZE * sizeof(int));
    stack->top = -1;
}

// 判断栈是否为空
int IsEmpty(Stack* stack) {
    return stack->top == -1;
}

// 判断栈是否为满
int IsFull(Stack* stack) {
    return stack->top == MAX_SIZE - 1;
}

// 入栈
void push(Stack* stack, int element) {
    if (IsFull(stack)) {
        printf('Stack is full. Cannot push element.\n');
        return;
    }
    
    stack->top++;
    stack->data[stack->top] = element;
}

// 出栈
int pop(Stack* stack) {
    if (IsEmpty(stack)) {
        printf('Stack is empty. Cannot pop element.\n');
        return -1;
    }
    
    int element = stack->data[stack->top];
    stack->top--;
    return element;
}

// 获取栈顶元素
int gettop(Stack* stack) {
    if (IsEmpty(stack)) {
        printf('Stack is empty. There is no top element.\n');
        return -1;
    }
    
    return stack->data[stack->top];
}

// 十进制转换为其他进制(二进制、十六进制、八进制)
void convert(Stack* stack, int number, int base) {
    while (number > 0) {
        int remainder = number % base;
        push(stack, remainder);
        number /= base;
    }
}

// 输出栈中的元素
void display(Stack* stack) {
    while (!IsEmpty(stack)) {
        printf('%d ', pop(stack));
    }
    printf('\n');
}

int main() {
    Stack stack;
    init(&stack);
    
    int number, base;
    printf('Enter a decimal number: ');
    scanf('%d', &number);
    printf('Enter the base for conversion (2, 8, 16): ');
    scanf('%d', &base);
    
    convert(&stack, number, base);
    
    printf('The converted number is: ');
    display(&stack);
    
    free(stack.data);
    
    return 0;
}

代码说明

  • Stack 结构体定义了栈的数据结构,包含一个 data 指针用于存储栈元素,top 表示栈顶位置。
  • init() 函数初始化栈,分配内存并设置栈顶指针为 -1。
  • IsEmpty()IsFull() 函数分别用于判断栈是否为空或栈满。
  • push() 函数将元素压入栈顶。
  • pop() 函数将栈顶元素弹出并返回该元素。
  • gettop() 函数返回栈顶元素,但不改变栈结构。
  • convert() 函数将十进制数转换为指定进制,并将每一位余数依次压入栈中。
  • display() 函数将栈中元素依次弹出并打印,实现进制转换结果的输出。

总结

本文介绍了使用C语言顺序存储结构实现栈的方法,并通过进制转换的例子展示了栈的应用。你可以根据实际需求对代码进行扩展和优化,例如:

  • 增加错误处理机制,例如栈溢出和栈下溢的处理
  • 支持更多进制的转换
  • 使用更复杂的数据类型作为栈元素
C语言实现栈(Stack)及进制转换

原文地址: https://www.cveoy.top/t/topic/bzU7 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录