news 2026/6/15 3:28:31

顺序栈的入栈函数

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
顺序栈的入栈函数

顺序栈的知识:

参考视频

46:31-1:01:06这部分讲了栈的概念,顺序表的初始化,出栈,入栈,获取栈顶元素

https://www.bilibili.com/video/BV1tNpbekEht?t=2790.6&p=5

笔记:

栈和队列栈:只能在表尾进行插入或删除操作的线性表

  • 栈顶:表尾部(操作的一端)
  • 栈底:表头部(固定的一端)
  • 空栈:不含元素的空表
  • 栈的特性:先进后出 / 后进先出
  • 栈的操作:进栈(插入元素)、出栈(删除最后插入的元素)栈的顺序结构实现:
  • 栈的顺序结构基于数组实现(栈顶指针对应数组下标)
  • 栈声明时已预先开辟数组空间,无需动态初始化
1. 基础定义(宏、类型、结构体)
// 栈的最大容量 #define MAXSIZE 100 // 栈存储的数据类型 typedef int ElemType; // 顺序栈的结构体定义 typedef struct { ElemType data[MAXSIZE]; int top; // 栈顶指针(取值范围:-1 ~ MAXSIZE-1) } Stack;
2. 栈的初始化函数
// 初始化栈:将栈顶指针设为-1(表示空栈) void initStack(Stack *s) { s->top = -1; }
3. 判断栈是否为空
// 判断栈是否为空:空栈返回1,非空返回0 int isEmpty(Stack *s) { if (s->top == -1) { printf("空的\n"); return 1; } else { return 0; } }
4. 进栈(压栈)函数
// 进栈:将元素e压入栈,成功返回1,栈满返回0 int push(Stack *s, ElemType e) { // 判断栈是否已满 if (s->top >= MAXSIZE - 1) { printf("满了\n"); return 0; } // 栈顶指针上移,存入元素 s->top++; s->data[s->top] = e; return 1; }
5. 出栈函数
// 出栈:取出栈顶元素存入*e,成功返回1,空栈返回0 int pop(Stack *s, ElemType *e) { // 判断栈是否为空 if (s->top == -1) { printf("空的\n"); return 0; } // 取出栈顶元素,栈顶指针下移 *e = s->data[s->top]; s->top--; return 1; }
6. 获取栈顶元素函数
// 获取栈顶元素:将栈顶元素存入*e,成功返回1,空栈返回0 int getTop(Stack *s, ElemType *e) { // 判断栈是否为空 if (s->top == -1) { printf("空的\n"); return 0; } // 取出栈顶元素(不移动栈顶指针) *e = s->data[s->top]; return 1; }

手写笔记:

题目:

#include <stdio.h> #include <malloc.h> #include <string.h> #define STACKSIZE 100 // 宏定义,设栈最大容量为100 typedef char DataType; // 数据类型 /****** 顺序栈 ******/ typedef struct // 顺序栈定义 { DataType items[STACKSIZE]; int top; // top表示栈顶指针,取值范围-1—STACKSIZE-1 }SqStack; /* 【 本题要求函数-入栈 】*/ int Push (SqStack * S, DataType e); /*S为指向顺序栈的指针,e为待入栈的数据元素*/ /****** 顺序栈初始化 ******/ void Initstack(SqStack *stack) // stack为指向顺序栈的指针 { stack->top = -1; } //出栈 int Pop (SqStack * S, DataType *e) /*S指向顺序栈指针,e出栈元素*/ { if( S->top <= -1) /*栈为空*/ return 0; *e= S->items[S->top]; /*将栈顶元素带回来*/ S->top--; /* 修改栈顶指针 */ return 1; } /****** 主函数 ******/ int main() { int i; SqStack stack; // 顺序栈 DataType ch; Initstack(&stack); for(i=0;i<STACKSIZE;i++) { ch = getchar(); if(ch=='\n') break; if(!Push(&stack,ch)) break; } if(Pop(&stack,&ch)) printf("%c",ch); return 0; } /* 请在这里填写答案 */

思路:

1.先判断栈满了吗?

2.再进行入栈,入栈,分为两步,a,指针上移,b,将数填入对应的栈内存中,

3.成功返回1

图示

答案

// C 语言值传递的特性,只有传地址(指针),才能让函数修改外部变量的值,让调用者拿到这个数。 int Push (SqStack * S, DataType e){ // 先判断栈满了吗? if(S->top>=STACKSIZE-1){ return 0; } // 入栈 S->top++; S->items[S->top]=e; return 1; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 13:55:22

关于“此电脑”的小工具,让你的Windows的瞬间不一样

今天给大家推荐两款处理“此电脑”的实用软件&#xff0c;感兴趣的小伙伴们赶紧保存吧&#xff01; ONE MyComputerManager 最近我打开“此电脑”&#xff0c;发现里面有三个网盘的快捷方式&#xff0c;简直让我这个有点强迫症的人受不了。 因此&#xff0c;我找到了今天要推…

作者头像 李华
网站建设 2026/6/15 12:37:26

企业估值中的AI驱动的自动化科学文献综述平台评估

企业估值中的AI驱动的自动化科学文献综述平台评估 关键词&#xff1a;企业估值、AI驱动、自动化科学文献综述平台、评估指标、应用场景 摘要&#xff1a;本文聚焦于企业估值领域中AI驱动的自动化科学文献综述平台的评估。首先介绍了研究的背景&#xff0c;包括目的、预期读者、…

作者头像 李华
网站建设 2026/6/10 3:58:51

Python安装新选择:Miniconda + 清华源极速配置AI开发环境

Python安装新选择&#xff1a;Miniconda 清华源极速配置AI开发环境 在人工智能项目日益复杂的今天&#xff0c;一个常见的场景是&#xff1a;你刚从GitHub上克隆了一个热门的深度学习项目&#xff0c;满怀期待地运行 pip install -r requirements.txt&#xff0c;结果却卡在某…

作者头像 李华
网站建设 2026/6/14 19:59:33

写给生产环境的 MySQL 高级用法:性能、兼容与真实踩坑

这 10 个 MySQL 高级用法,能让你的 SQL 更高效、更优雅 在日常开发中,很多 MySQL 查询**“能跑就行”,但在数据量变大、逻辑变复杂后,SQL 的可读性、性能和可维护性**就会迅速成为瓶颈。 本文结合真实业务场景,总结 10 个 MySQL 高级用法,不仅能显著提升查询效率,还能…

作者头像 李华
网站建设 2026/6/12 5:57:35

从“价值对齐”到“价值共生”:AI元人文构想的范式革命与路径探索

从“价值对齐”到“价值共生”&#xff1a;AI元人文构想的范式革命与路径探索核心立场&#xff1a;拥抱以数值透明表征价值&#xff0c;反对以数值暗地优化价值。引言&#xff1a;智能时代的价值绝境与范式突围我们正站在智能时代的断层线上。人工智能&#xff0c;特别是大型语…

作者头像 李华
网站建设 2026/6/15 13:53:30

ACL实验null

1.全网互通&#xff1b; 2、PC1可以访问Telnet R1&#xff0c;不能ping R1 3、PC1不能访问Telnet R2&#xff0c;但可以ping R2 4、PC2和PC1相反3、实验思路1、配置地址 2、配置静态路由&#xff0c;实现全网通 3、配置Telnet&#xff0c;并测试 4、配置ACL&#xff0c;并测试四…

作者头像 李华