首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用c实现带指针的堆栈

带指针的堆栈是一种数据结构,它遵循先进后出(LIFO)的原则。堆栈中的元素通过指针进行连接,每个元素都包含一个指向下一个元素的指针。使用C语言可以实现带指针的堆栈,以下是一个简单的实现示例:

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>

// 定义堆栈节点结构
typedef struct StackNode {
    int data;
    struct StackNode* next;
} StackNode;

// 创建一个空的堆栈
StackNode* createStack() {
    return NULL;
}

// 判断堆栈是否为空
int isEmpty(StackNode* root) {
    return (root == NULL);
}

// 入栈操作
void push(StackNode** root, int data) {
    StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
    if (newNode == NULL) {
        printf("内存分配失败\n");
        return;
    }
    newNode->data = data;
    newNode->next = *root;
    *root = newNode;
    printf("%d 入栈成功\n", data);
}

// 出栈操作
int pop(StackNode** root) {
    if (isEmpty(*root)) {
        printf("堆栈为空\n");
        return -1;
    }
    StackNode* temp = *root;
    *root = (*root)->next;
    int popped = temp->data;
    free(temp);
    return popped;
}

// 获取栈顶元素
int peek(StackNode* root) {
    if (isEmpty(root)) {
        printf("堆栈为空\n");
        return -1;
    }
    return root->data;
}

// 打印堆栈中的元素
void printStack(StackNode* root) {
    if (isEmpty(root)) {
        printf("堆栈为空\n");
        return;
    }
    printf("堆栈中的元素:\n");
    while (root != NULL) {
        printf("%d\n", root->data);
        root = root->next;
    }
}

int main() {
    StackNode* stack = createStack();

    push(&stack, 10);
    push(&stack, 20);
    push(&stack, 30);

    printf("栈顶元素:%d\n", peek(stack));

    printf("出栈:%d\n", pop(&stack));
    printf("出栈:%d\n", pop(&stack));

    printStack(stack);

    return 0;
}

这个示例中,我们使用了一个结构体StackNode来表示堆栈的节点,其中包含一个整数类型的数据和一个指向下一个节点的指针。通过createStack函数创建一个空的堆栈,isEmpty函数用于判断堆栈是否为空。push函数用于将元素入栈,pop函数用于出栈并返回出栈的元素,peek函数用于获取栈顶元素,printStack函数用于打印堆栈中的所有元素。

这只是一个简单的带指针的堆栈实现示例,实际应用中可能需要根据具体需求进行扩展和优化。腾讯云提供了丰富的云计算产品,例如云服务器、云数据库、云存储等,可以根据具体场景选择适合的产品进行使用。具体产品介绍和相关链接可以参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券