堆栈的顺序存储结构如何创建(C语言,带详细注释)

时间: 2024-01-31 22:02:02 浏览: 31
以下是一个使用数组实现堆栈的顺序存储结构的示例代码,使用C语言编写,并带有详细注释: ```c #include <stdio.h> #define MAX_SIZE 100 // 定义堆栈结构 typedef struct { int data[MAX_SIZE]; // 用于存储堆栈元素的数组 int top; // 栈顶指针,指向最后一个元素的位置 } Stack; // 初始化堆栈 void initStack(Stack *stack) { stack->top = -1; // 初始时将栈顶指针设置为-1,表示堆栈为空 } // 判断堆栈是否为空 int isEmpty(Stack *stack) { return (stack->top == -1); // 栈顶指针为-1时表示堆栈为空 } // 判断堆栈是否已满 int isFull(Stack *stack) { return (stack->top == MAX_SIZE - 1); // 栈顶指针等于数组最大索引时表示堆栈已满 } // 入栈操作 void push(Stack *stack, int item) { if (isFull(stack)) { printf("Stack Overflow!\n"); return; } stack->top++; // 栈顶指针加1 stack->data[stack->top] = item; // 将元素存入栈顶指针所指向的位置 } // 出栈操作 int pop(Stack *stack) { if (isEmpty(stack)) { printf("Stack Underflow!\n"); return -1; // 表示栈为空,返回一个特殊值 } int item = stack->data[stack->top]; // 取出栈顶元素 stack->top--; // 栈顶指针减1 return item; // 返回出栈的元素值 } // 获取栈顶元素 int peek(Stack *stack) { if (isEmpty(stack)) { printf("Stack is empty!\n"); return -1; // 表示栈为空,返回一个特殊值 } return stack->data[stack->top]; // 返回栈顶元素的值 } int main() { Stack stack; initStack(&stack); // 初始化堆栈 push(&stack, 10); // 入栈操作 push(&stack, 20); push(&stack, 30); printf("Top element: %d\n", peek(&stack)); // 输出栈顶元素 printf("Pop element: %d\n", pop(&stack)); // 出栈操作 printf("Pop element: %d\n", pop(&stack)); printf("Pop element: %d\n", pop(&stack)); if (isEmpty(&stack)) { printf("Stack is empty!\n"); } else { printf("Stack is not empty!\n"); } return 0; } ``` 此示例展示了如何使用数组实现堆栈的顺序存储结构。在主函数中,我们首先使用`initStack`函数初始化堆栈。然后使用`push`函数将元素依次压入堆栈,并使用`peek`函数获取栈顶元素。接下来,我们使用`pop`函数将元素从堆栈中弹出,并输出弹出的元素值。最后,我们使用`isEmpty`函数检查堆栈是否为空,并输出相应的信息。 请注意,此示例中的堆栈实现是基于数组的,因此在定义堆栈时需要提前指定最大容量。在入栈操作时,我们需要检查堆栈是否已满;在出栈操作时,我们需要检查堆栈是否为空。

相关推荐

最新推荐

recommend-type

Golang捕获panic堆栈信息的讲解

今天小编就为大家分享一篇关于Golang捕获panic堆栈信息的讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
recommend-type

Java如何自定义异常打印非堆栈信息详解

主要给大家介绍了关于Java如何自定义异常打印非堆栈信息的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
recommend-type

Android activity堆栈及管理实例详解

主要介绍了Android activity堆栈及管理实例详解的相关资料,非常不错,具有参考借鉴价值,对android activity堆栈相关知识感兴趣的朋友一起学习吧
recommend-type

python实现异常信息堆栈输出到日志文件

今天小编就为大家分享一篇python实现异常信息堆栈输出到日志文件,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
recommend-type

Linux系统Iptables规则执行顺序详细讲解

Iptables是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查Prerouting,然后检查目的IP判断是否需要转送出去,接着就会跳到INPUT或Forward进行过滤,如果封包需转送处理则检查Postrouting,如果是来自...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

解释minorization-maximization (MM) algorithm,并给出matlab代码编写的例子

Minorization-maximization (MM) algorithm是一种常用的优化算法,用于求解非凸问题或含有约束的优化问题。该算法的基本思想是通过构造一个凸下界函数来逼近原问题,然后通过求解凸下界函数的最优解来逼近原问题的最优解。具体步骤如下: 1. 初始化参数 $\theta_0$,设 $k=0$; 2. 构造一个凸下界函数 $Q(\theta|\theta_k)$,使其满足 $Q(\theta_k|\theta_k)=f(\theta_k)$; 3. 求解 $Q(\theta|\theta_k)$ 的最优值 $\theta_{k+1}=\arg\min_\theta Q(
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。