数据结构考研自用——静态顺序栈的实现【王道/严蔚敏C语言版】

408数据结构一图流复习:线性表、树、图与排序算法全梳理 数据结构作为计算机专业的核心基础课,其本质是存储结构与操作集合的有机结合,顺序存储与链式存储的灵活运用构成了线性表、栈、队列、树、图等各类结构的实现基石。理解时间复杂度与空间复杂度的取舍,能帮助学习者在面对不同应用场景时选择最优方案,例如二叉树遍历、最小生成树、最短路径以及各类排序算法。在408考研与期末复习中,建立清晰的知识地图至关重要。本文以“一图流”方式系统梳理了从线性表到排序算法的核心脉络、常考题型与易错点,帮助读者快速定位薄弱环节,提升复习效率,为计算机专业基础打下扎实根基。 阅读详情

顺序栈的实现比较简单,需要注意的是top指针初始化的值,为-1时指向的是栈顶元素,为0时指向的是栈顶元素的下一个元素位置。top指针初始化值的不同也会带来后续Push和Pop操作时的不同(是先移动栈顶指针再赋值,还是相反),这点在写代码时尤其需要注意。这里实现时top指针初始化为-1,也就是指向栈顶元素,并且是以静态数组的形式实现的,无法扩充数组大小,有兴趣的同学也可以尝试使用动态数组实现,其思路与动态顺序表相似,在栈满上溢时分配额外的空间给栈。

下面是顺序栈的实现代码,使用ide为vs2019。

SeqStack.h

#define _CRT_SECURE_NO_WARNINGS

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

#define ElemType int
#define MaxSize 10

//顺序栈定义
typedef struct{
	ElemType data[MaxSize];
	int top;	//栈顶指针
}SeqStack;

void InitStack(SeqStack &s);	//初始化栈
void PrintStack(SeqStack s);	//打印栈
bool Push(SeqStack& s, ElemType e);		//元素进栈
bool Pop(SeqStack& s, ElemType& e);		//元素出栈
bool isEmpty(SeqStack s);		//判空
bool isfull(SeqStack s);		//判满
bool GetTop(SeqStack s, ElemType& e);	//查找栈顶元素

SeqStack.c

#include "SeqStack.h"

void InitStack(SeqStack& s) {
	s.top = -1;		//top指向栈顶元素
}


bool isEmpty(SeqStack s) {
	return(s.top == -1);
}

bool isfull(SeqStack s) {
	return(s.top == MaxSize);
}

void PrintStack(SeqStack s) {
	if (isEmpty(s)) {
		printf("栈空!\n");
		return;
	}
	printf("从栈底到栈顶:");
	for (int i = 0; i <= s.top; i++) {
		printf("%d    ", s.data[i]);
	}
	printf("\n");
}


bool Push(SeqStack& s, ElemType e) {
	if (isfull(s)) {
		printf("栈满!操作失败\n");
		return false;
	}
	s.data[++s.top] = e;	//注意++s.top和s.top++的区别,一个是先移动top指针再赋值,一个是先赋值再移动top指针
	return true;
}

bool Pop(SeqStack& s, ElemType& e) {
	if (isEmpty(s)) {
		printf("栈空!操作失败\n");
		return false;
	}
	printf("%d出栈!\n", s.data[s.top]);
	e = s.data[s.top--];
	return true;
}

bool GetTop(SeqStack s, ElemType& e) {
	if (isEmpty(s)) {
		printf("栈空!\n");
		return false;
	}
	e = s.data[s.top];
	return true;
}

main.c

#include "SeqStack.h"

//测试
void main() {
	SeqStack s;
	ElemType e;

	InitStack(s);
	Push(s, 1);
	Push(s, 2);
	Push(s, 3);
	PrintStack(s);
	Pop(s, e);
	printf("e:%d\n", e);
	PrintStack(s);
	GetTop(s, e);
	printf("e:%d\n", e);
	
}
顺序栈各种基本运算算法的实现 栈中数据用数组储存,通过top(),push(),pop()基本的函数用以实现其功能。 参见博客:http://blog.youkuaiyun.com/xiaowei_cqu/article/details/7748152 立即下载

相关推荐

基于STM32的智能工业机器人臂控制系统

工业机器人臂是智能制造的核心组件,广泛应用于装配、焊接、搬运等任务。基于STM32微控制器的机器人臂控制系统,通过集成伺服电机驱动、运动规划算法和实时通信功能,实现对多轴机械臂的精确控制与路径规划。本设计通过STM32实现了一套智能工业机器人臂控制系统,集成了高效的运动规划算法和实时控制功能。机器人臂系统根据输入的目标位置(如工件坐标),通过运动学计算生成动作轨迹,利用伺服电机驱动器控制关节运动。该系统广泛应用于工业自动化场景,如汽车制造中的零件装配、电子产品生产中的元件焊接以及物流系统中的物料搬运。

stm32d1219的博客 2568

栈的C语言实现

一个栈的C语言实现,函数声明放在stack.h头文件汇总,函数定义放在stack.c中,main.c 用来测试各个函数. 1.文件 stack.h // stack.h #ifndef __STACK_H__ #define __STACK_H__ typedef int DataType; typedef struct node{ DataType data; ...

一 1万+

NSGA(非支配排序遗传算法)

在多目标优化问题中,往往存在多个相互冲突的目标需要同时优化。传统的单目标优化算法无法直接应用于这类问题,因此需要专门的多目标优化算法。非支配排序遗传算法(Non-dominated Sorting Genetic Algorithm,NSGA)是一种经典的多目标优化算法,由印度科学家 Kalyanmoy Deb 等人于 1995 年提出。NSGA 通过非支配排序和拥挤度距离来引导种群向 Pareto 最优前沿进化,从而得到一组具有良好分布性和收敛性的 Pareto 最优解。

2977

入栈操作程序 c语言,栈的基本操作(C语言版):入栈,出栈,输出栈

#include#define MAXN 10int push(int *stack,int maxn,int *toppt,int x)//调用时不加&是因为push(&s,Maxn,&top,i)中s是数组元素,其名字代表数组首地址{if(*toppt>=maxn)return 1;//栈满stack[*toppt]=x;//第一步操作,保证元素在0位置处(*to...

weixin_31082779的博客 1971

51单片机AHT20-21源代码

传感器输出经过 标定的数字信号,标准 I 2 C 格式。AHT20 配有一个全新设计的 ASIC专用芯片、一 个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,其 性能已经大大提升甚至超出了前一代传感器的可靠性水平,新一代温湿度传感器, 经过改进使其在恶劣环境下的性能更稳定。但是现在网上的大多数原码都是针对stm32等的这种多位单片机,而我们都知道51单片机是8位单片机,无法对浮点数进行运算,对32位的整数计算有时候也不是很准确,所以我对网上stm32的例程进行了修改。...

wd0710的博客 4549

win x64下安装oracle 12c出现[INS-30131]报错的解决方案

问题:  win x64下安装oracle 12c出现[INS-30131]报错的解决方案 安装oracle11g碰到“无法访问临时位置”的问题,详细信息如下: INS-30131] 执行安装程序验证所需的初始设置失败。 原因 - 无法访问临时位置。   操作 - 请确保当前用户具有访问临时位置所需的权限。   附加信息:  - 所有节点上的框架设置检查都失败  

一条道走到黑的GISer 1347

堆栈(stack)

堆栈又称为栈, 是一种应用十分广泛的数据结构.  在一端进行插入和删除.因此后进入的原始必须先退出,先进入必须后退出,栈底(bottom),栈顶(top),通常说"后进先出"(Last In First Out,简称LIFO)或"先进后出"(FILO)堆栈的基本运算:int stack[MAX];   /*数组下标从0~MAX-1/int tp; /*top of stack,全局变量*/

rbagglo的专栏 754

OpenClaw 股票自动化交易实践指南:从原理到实战的完整技术路径

量化交易策略的开发是一个系统工程,需要综合运用金融知识、编程技能和数据分析能力。OpenClaw通过引入提示词工程技术,大大降低了策略开发的技术门槛,使得更多投资者能够参与到量化交易中来。但技术只是工具,真正决定策略成败的是对市场的深刻理解和严格的风险管理。本章系统介绍了OpenClaw环境下的策略开发方法,从提示词驱动到传统代码实现,从参数优化到回测验证,涵盖了策略开发的完整流程。提示词驱动方式适合快速验证交易想法,传统代码方式适合实现复杂的定制逻辑,两种方式可以协同使用,发挥各自的优势。

lovely_yoshino的博客 5991

堆栈的学习代码实现

#include <iostream> #include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> #define STACK_INIT_SIZE 5 #define ok 1 #define error 0 using namespace std; typedef int elemtype; typedef int status; typedef str

小白有颗大白梦的博客 655

【AUTOSAR-DEM】-2.1-APP SWC设置UDS/OBD DTC检出和恢复

点击返回「《Autosar_BSW高阶配置》总目录」 案例背景(共6页精讲): DEM模块提供两种不同类型的Event: • BSW-related events:DEM_EVENT_KIND_BSW(通过C-API报告 - Dem_SetEventStatus) • SW-C-related events:DEM_EVENT_KIND_SWC(通过RTE operation - SetEventStatus) 下面我们讲讲在APP SWC中设置BusOff(总线关闭) DTC故障成立/恢复(其它

「汽车电子助手」的博客 3944

OpenCV实现文档扫描OCR识别(基于Python + OpenCV,含完整代码)

在当今数字化时代,文档处理的自动化需求日益增长。文档扫描OCR(Optical Character Recognition,光学字符识别)技术成为了将纸质文档转换为可编辑电子文本的关键手段。通过Python与OpenCV库的结合,我们能够实现高效、准确的文档扫描OCR识别。这一技术在办公自动化、数字图书馆、档案管理等众多领域都有着广泛的应用。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 2031

数据结构 栈的建立及入栈出栈操作 C语言版

//链栈的建立及其出栈入栈操作 #include #include typedef int StackElementType ; typedef struct SNode {     StackElementType data;     struct SNode * next; } LinkStackNode,* LinkStack;  //定义链表的结点,链表头 v

你若盛开 清风自来 4358

SAP录入总账凭证报错 公司代码未被分配给国家或用于计算程序的国家消息号 FF703

SAP系统报错FF703的解决方案:当公司代码未分配国家或未配置计税程序时,会导致增值税计算失败。处理方法:1)通过OX02检查公司代码国家字段;2)使用OBBG为国家分配计税程序(如TAXCN)。配置步骤:1)SPRO分配公司代码到国家;2)OBBG设置国家对应的计税程序。注意事项:历史数据需清理才能修改国家字段,不同账簿可配置不同计税程序。完成配置后即可正常处理含税凭证。

金牌架构师 557

数据结构考研手撕代码实战:从零基础到考场精通

数据结构是计算机科学的核心基础,它研究数据的组织、存储和操作方式,旨在提升程序运行效率。其核心原理在于通过特定的逻辑结构(如线性表、树、图)和物理存储结构,结合算法实现对数据的增删改查。掌握数据结构对于编写高效、稳定的程序至关重要,是解决复杂工程问题和优化系统性能的基石,广泛应用于数据库、操作系统、编译器及人工智能等领域。本文聚焦考研实战,针对【手撕代码】和【代码框架】两大核心难点,系统讲解如何将抽象的数据结构理论转化为可运行、健壮的C语言代码,帮助考生跨越从理解到实现的鸿沟,从容应对专业课考试。

weixin_33674976的博客 428

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

26考研——栈、队列和数组_栈(3)

26考研408数据结构——栈、队列和数组,持续更新ing

主攻整理408、专升本资料~ 1690

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数据结构高频考点:循环队列、指针与栈的代码实现与调试

数据结构中线性结构一直是学习和面试的重点,尤其是循环队列、指针与栈三个模块,几乎覆盖了期末、考研和笔试中的核心题型。循环队列的本质是利用数组模拟环形逻辑,通过取模运算处理下标回绕,并借助牺牲一个存储单元等方式区分队空与队满;栈则强调后进先出规则,顺序栈、链栈及共享栈的实现体现了存储结构对操作效率的影响;指针作为C语言的核心机制,在链表操作、动态内存管理及二级指针传参等方面决定了代码的稳定性。理解这些概念的内在原理,掌握判空判满条件、栈顶指针约定、内存释放流程等工程实现细节,能帮助学习者在实际编码中快速定位问

a359798678的博客 416

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

构建动态数据结构知识库:从理论到代码实践的笔记方法论

数据结构是计算机科学的核心基础,它研究数据元素之间的逻辑关系、存储结构及其操作实现。其核心原理在于通过高效的组织方式,在时间与空间复杂度之间取得平衡,以优化数据的增删改查效率。掌握数据结构对于提升算法能力、优化程序性能具有关键价值,广泛应用于数据库索引、缓存系统、编译器设计等工程场景。本文聚焦于如何构建一份‘活’的笔记系统,将数据结构知识内化为可迭代、可实战的动态知识库。通过结合Markdown、Git等工具链,并融入哈希表、红黑树等核心数据结构的实现细节与对比分析,帮助学习者建立从理论理解到代码调试的完整

weixin_34059951的博客 715

c语言 int top,堆栈(C语言)

堆栈(顺序存储)数组方式typedef struct{int Data[MAXSIZE];int Top;}Stack;void Push(Stack *stack,int value){if(stack->Top==MAXSIZE-1){//数组有界printf("堆栈满");}else{stack->Data[++(stack->Top)]=value;return;}}in...

weixin_29424569的博客 1034

栈(stack) C语言实现 详解

栈是数据结构中较为简单的结构体,是一种操作收到限制的线性表.但简单不代表没用,毕竟数组还贼简单呢.谁敢说数组没用?栈栈的理论 栈是一个先进后出的结构,类似于堆盘子,先放到地上的盘子最后被取走(默认只能取走一个盘子) 栈其实就是操作受限的线性表,只有一个口,每一次操作时,这个口可以当出口也可以当入口. 例如:水桶,注入水时,水桶的头当做入口,倒水时,水桶的头当做出口 栈的图解.在图解之前,先举一个例...

过道 10万+

push c语言什么作用,“c语言”中,“pop函数”和“push函数”的作用分别是什么?...

这个算是数据结构的内容讲解的是一个叫做栈类型的数据结构,这个数据结构的特点就是后进先出--最后放进去的数据最先拿出来。pop函数就是拿出数据的操作,push是放入是数据的操作。内容拓展:pop函数呵push函数的使用:#include #include #include void *clean(void *arg){printf("cleanup: %s \n",(char *)arg);retu...

weixin_28040125的博客 3614

数据结构 总结3 栈与队列

数据结构复习3 栈 队列

qq_50918834的博客 2283

汇编语言 执行push和执行pop区别 栈顶的变化范围

执行pop时,先读取SS:SP处的数据,后改变SP。 执行push时,先改变SP,后向SS:SP处传送。

HWP 1579

数据结构之栈的push与pop操作(顺序存储结构的c实现)

枝( stack )是限定仅在襄尾进行捕入和删除撮伟的雄性袋。

keepupblw的专栏 1万+

栈中pop和top的区别是什么呢?用队列实现一个栈,Python语言

区别:  pop是弹出栈顶元素,top是获得栈顶元素,不弹出  pop弹出后可以获取,把弹出的东西付给某个变量   具体可以通过用队列实现一个栈来分析原因。 #用队列实现栈 class Stack: """ @param: x: An integer @return: nothing """ def __init__(self): ...

湾区人工智能 1万+

栈的使用(push、pop详解)学习笔记

概念: 栈是一种数据结构,可以添加或者删除值,不过要遵循“后进先出”的原则。通过 push 操作把数据压入栈中,通过pop操作删除数据;它具有一个属性:弹出的值永远是最近被压入而且仍然在栈中的值。 栈可以实现为一个数组,总是从数组的一端插入和删除元素。这一端被称为栈顶。在x86-64中,程序栈存放在内存中某个区域。栈顶元素的地址是所有栈中元素地址中最低的。(根据惯例,我们的栈是倒过来画的,栈“顶”在图的底部。)栈指针%rsp保存着栈顶元素的地址。 PUSHQ与...

weixin_42492218的博客 2万+

静态顺序栈 C语言实现

数据结构c语言静态顺序栈的实现和操作 代码如下: #include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 //静态顺序栈存储的最大空间 typedef struct { int data[MAXSIZE];//静态顺序栈可用的最大容量 int top;//栈顶 }SqStack; void InitStack(SqStack &S)//栈的初始化 { S.top = -1;//静态顺序栈中,使

qq_43402544的博客 588
上一篇: 数据结构考研自用——动态顺序表的实现【王道/严蔚敏C语言版】
下一篇: 【杭电oj】2037题--今年暑假不AC--深度优先搜索
Like___This
博客等级 码龄6年 2粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值