C语言中栈的两种实现方法详解

C语言中栈的两种实现方法详解

栈,即先进后出(LIFO)的数据结构。在C语言中,栈是一个重要的概念,可以用于实现各种算法和数据结构。

本文主要介绍C语言中栈的两种实现方法。

方法一:基于数组实现栈

基于数组实现栈是一种简单的方法。我们可以定义一个数组作为栈的存储空间,并且定义栈顶指针(top)来指示栈顶元素的位置。

下面是一个简单的示例代码:

#include <stdio.h>

#define MAX_STACK_SIZE 100

typedef struct {
    int stack[MAX_STACK_SIZE];
    int top;
} Stack;

void init(Stack *s)
{
    s->top = -1;
}

void push(Stack *s, int value)
{
    if (s->top == MAX_STACK_SIZE - 1) {
        printf("Error: stack is full\n");
        return;
    }
    s->top++;
    s->stack[s->top] = value;
}

int pop(Stack *s)
{
    if (s->top == -1) {
        printf("Error: stack is empty\n");
        return -1;
    }
    int value = s->stack[s->top];
    s->top--;
    return value;
}

int main()
{
    Stack s;
    init(&s);
    push(&s, 1);
    push(&s, 2);
    push(&s, 3);
    printf("%d\n", pop(&s));
    printf("%d\n", pop(&s));
    printf("%d\n", pop(&s));
    printf("%d\n", pop(&s));
    return 0;
}

在上面的代码中,我们使用了一个结构体来表示栈,其中stack数组表示栈的存储空间,top表示栈顶元素的位置。init函数用来初始化栈,push函数用来将元素入栈,pop函数用来将元素出栈。

方法二:基于链表实现栈

基于链表实现栈是另一种常用的方法。我们可以定义一个链表结构体来表示栈。

下面是一个简单的示例代码:

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

typedef struct node {
    int value;
    struct node *next;
} Node;

Node *push(Node *head, int value)
{
    Node *new_node = (Node *)malloc(sizeof(Node));
    new_node->value = value;
    new_node->next = head;
    head = new_node;
    return head;
}

Node *pop(Node *head, int *value)
{
    if (head == NULL) {
        printf("Error: stack is empty\n");
        return NULL;
    }
    *value = head->value;
    Node *temp = head;
    head = head->next;
    free(temp);
    return head;
}

int main()
{
    Node *head = NULL;
    head = push(head, 1);
    head = push(head, 2);
    head = push(head, 3);
    int value;
    head = pop(head, &value);
    printf("%d\n", value);
    head = pop(head, &value);
    printf("%d\n", value);
    head = pop(head, &value);
    printf("%d\n", value);
    head = pop(head, &value);
    printf("%d\n", value);
    return 0;
}

在上面的代码中,我们使用了一个链表来表示栈,其中每个节点包含一个value字段用来存储栈元素的值,next字段用来指向下一个节点。push函数用来将元素入栈,pop函数用来将元素出栈,并且通过传递指针的方式来返回出栈的元素。

总结

本文介绍了C语言中栈的两种实现方法:基于数组实现栈和基于链表实现栈。这两种方法各有优缺点,在实际开发中应根据需要选择适合的方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言中栈的两种实现方法详解 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • loadavg数据异常引发问题起源分析

    当我们使用Linux系统时,经常会使用命令top查看系统状态。其中有一项很重要的指标就是load average(平均负载)。load average是指单位时间内系统运行队列中的平均进程数,是衡量系统负荷程度的最基本指标之一。 但是在实际应用中,常常会遇到load average数据异常的问题。这会导致系统运行缓慢,处理能力减弱,甚至会导致系统崩溃。那么如…

    C 2023年5月22日
    00
  • php json_encode()函数返回json数据实例代码

    下面是关于php json_encode()函数返回json数据实例代码的详细攻略: 1. json_encode()函数简介 json_encode()函数是PHP内置的一个函数,是将PHP变量转换为JSON格式的字符串的常用方法。在实际开发中,通过该函数将PHP数组、对象等数据类型转换为JSON格式后,可以通过Ajax技术在前端页面实现异步数据传输。 2…

    C 2023年5月23日
    00
  • PHP实现的json类实例

    下面是详细讲解“PHP实现的json类实例”的完整攻略: 概述 在PHP中,我们可以使用json相关函数来处理JSON数据,但是这些函数可能比较麻烦,因为需要手动进行编码和解码,而且可读性也比较差。所以,我们可以利用PHP自定义类来实现对JSON数据的更便捷的操作。 实现步骤 1. 创建JSON类 我们可以通过创建一个JSON类来实现对JSON数据的处理。在…

    C 2023年5月23日
    00
  • C语言实现简单的井字棋游戏

    下面是C语言实现简单的井字棋游戏的攻略,包括以下几个步骤: 1. 设计游戏界面 首先要设计游戏界面,可以使用控制台进行简单的界面设计。井字棋游戏的界面通常是三行三列的棋盘,每个格子显示一个棋子或空白。 下面是一种简单的井字棋游戏界面设计: | | 1 | 2 | 3 _____|_____|_____ | | 4 | 5 | 6 _____|_____|__…

    C 2023年5月23日
    00
  • c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)

    一、简介 货物管理系统可以帮助企业更好地管理其货品,是一套非常实用的管理系统。本文将介绍使用c语言实现的一套货物管理系统,包括增加、删除、查找货物信息等功能。 二、实现步骤 设计数据结构 首先,我们需要设计合适的数据结构用于存储货物信息。可以使用结构体来定义货物信息,例如: struct goods { int id; char name[50]; int …

    C 2023年5月23日
    00
  • 中国式家长特长有哪些 特长种类及品质一览

    中国式家长特长有哪些 1. 家长特长一览 中国式家长的特长主要包括以下领域: 学术特长:对学术成果有着强烈的追求,希望自己的孩子在学术上有所突出。 才艺特长:对于音乐、美术、舞蹈、书法等领域有一定的天赋或爱好,希望孩子能够在这方面有所发展。 运动特长:注重体育锻炼,希望孩子在体育运动领域能够有所表现。 社交特长:去关注孩子的人际关系及社交技巧。 实用特长: …

    C 2023年5月22日
    00
  • Node.js在child_process域和错误冒泡及捕获实践

    在Node.js中,子进程模块child_process提供了一些API用于创建和管理子进程,允许Node.js应用程序在新的进程中执行命令和脚本。但是,在使用child_process创建的子进程中,可能会出现错误。本篇攻略将着重介绍子进程中的错误冒泡及其如何捕获这些错误。 错误冒泡 在一个子进程中,如果一个错误出现在子进程的某个方法中并且没有被捕获和处理…

    C 2023年5月22日
    00
  • C语言函数指针数组实现计算器功能

    要实现一个简单的计算器,我们可以利用函数指针数组来实现。具体的代码实现,可以如下: 1. 定义函数指针 首先,我们需要定义四个函数,分别实现加、减、乘、除操作。然后,我们定义一个函数指针数组,用来存储这四个函数。 // 定义加、减、乘、除四个函数 int add(int a, int b) { return a+b; } int sub(int a, int…

    C 2023年5月24日
    00
合作推广
合作推广
分享本页
返回顶部