【数据结构】宜宾大学-计院-实验四
栈和队列之(栈的基本操作)
- 实验目的:
- 实验内容:
- 实验结果:
- 实验报告:(及时撰写实验报告):
- 实验测试结果:
- 代码实现1.0:(C/C++)【含注释】
- 代码实现2.0:(优化 且 纯C版本)
- 实现十进制数与其它进制数的转换
- 代码实现:
- 测试结果:
实验目的:
1.掌握栈的顺序存储结构和链式存储结构
2.实现栈的基本操作,包括栈的建立、求长度、取栈顶元素、入栈、出栈、判栈空 等函数
实验内容:
1.完成顺序栈的建立
2.实现顺序栈的入栈
3.实现顺序栈的出栈
4.判断顺序栈是否为空
5.实现取栈顶元素
6. 实现十进制数与其它进制数的转换
实验结果:
每个同学都要记录实验结果(无论对与错),如果程序调试中有什么错误,记录并分析原因,必须另寻时间调试成功。
实验报告:(及时撰写实验报告):
实验测试结果:

代码实现1.0:(C/C++)【含注释】
#define SIZE_MAX 2 //初始栈容量
#define STACK_INCREMENT 5 //扩容增量
#include<iostream>
#include<stdlib.h>
#include<stdio.h>
using namespace std;typedef int datatype;//top减base为有效元素个数
typedef struct Stack
{datatype* top;//top指向栈顶元素的下一个地址datatype* base;//栈底int capacity;//容量
}ST;void InitStack(ST& head)
{datatype* tmp = (datatype*)malloc(sizeof(datatype) * SIZE_MAX);if (tmp == NULL) return;//都指向首地址head.top = head.base = tmp;head.capacity = SIZE_MAX;
}void DestroyStack(ST& head)
{free(head.base);head.base = head.top = NULL;head.capacity = 0;
}bool EmptyStack(ST& head)
{return head.base == head.top;
}
bool OverflowStack(ST& head)
{if (head.top - head.base == head.capacity)return true;return false;
}
void Push(ST& head, datatype x)
{if (OverflowStack(head)){datatype* tmp = (datatype*)realloc(head.base, sizeof(datatype) * (head.capacity + STACK_INCREMENT));if (tmp == NULL) return;head.base = tmp;//扩容后恢复原来指针指向,更新容量head.top = head.base + head.capacity;head.capacity += STACK_INCREMENT;}*head.top++ = x;
}
void PopTop(ST& head)
{if (EmptyStack(head)) return;head.top--;
}
datatype GetTop(ST& head)
{if (!EmptyStack(head))return *(head.top - 1);
}
int SizeStack(ST& head)
{if(!OverflowStack(head))return head.top - head.base;
}int main()
{ST head;InitStack(head);Push(head, 1);Push(head, 2);Push(head, 3);Push(head, 4);while (!EmptyStack(head)){cout << "输出当前栈顶元素:" << GetTop(head) << endl;PopTop(head);cout << "栈里剩余元素个数:" << SizeStack(head) << endl << endl;}DestroyStack(head);return 0;
}
代码实现2.0:(优化 且 纯C版本)
- 优化:动态2倍扩容
- 与1.0版本对栈的实现区别:这里的top也是指向栈顶元素下一个位置,其类型为整形(即下标)
stack.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>
typedef int STDataType;
typedef struct Stack
{STDataType* a;int top;int capacity;
}ST;
void STInite(ST *ps);
void STDestroy(ST* ps);void STPush(ST* ps, STDataType x);
void STPop(ST* ps);
int STSize(ST* ps);
bool STEmpty(ST* ps);
STDataType STTop(ST* ps);
stack.c
#include"stack.h"
void STInite(ST* ps)
{assert(ps);ps->a = (STDataType*)malloc(sizeof(STDataType) * 3);if (ps->a==NULL){perror("malloc fail");return;}ps->capacity = 3;ps->top = 0;//栈顶为top前一个元素//ps->top = -1;//栈顶为top元素
}
void STDestroy(ST* ps)
{assert(ps);free(ps->a);ps->a = NULL;ps->capacity = 0;ps->top = 0;
}void STPush(ST* ps, STDataType x)
{assert(ps);if (ps->capacity == ps->top){STDataType *tmp = (STDataType*)realloc(ps->a, sizeof(STDataType) * ps->capacity*2);if (tmp == NULL){perror("realloc fail");return;}ps->a = tmp;ps->capacity =ps->capacity * 2;}ps->a[ps->top++] = x;//ps->top++;
}
void STPop(ST* ps)
{assert(ps);assert(!STEmpty(ps));ps->top--;
}
int STSize(ST* ps)
{assert(ps);return ps->top;
}
bool STEmpty(ST* ps)
{assert(ps);return ps->top == 0;
}
STDataType STTop(ST* ps)
{assert(ps);assert(!STEmpty(ps));return ps->a[ps->top - 1];
}
text.c
#include"stack.h"
int main()
{ST st;STInite(&st);STPush(&st, 1);STPush(&st, 2);STPush(&st, 3);STPush(&st, 4);while (!STEmpty(&st)){printf("输出当前栈顶元素:%d\n", STTop(&st));STPop(&st);printf("栈里剩余元素个数:%d\n\n", STSize(&st));}STDestroy(&st);return 0;
}
实现十进制数与其它进制数的转换
代码实现:
void conversion()
{int num, x;cout << "请输入要转化的十进制数字:" << endl;cin >> num;cout << "期望将它转化为几进制数" << endl;cin >> x;cout << "将十进制数 " << num << " " << "转化为 " << x << " " << "进制数得到的结果为:" << endl;ST st;InitStack(st);while (num > 0){Push(st, num % x);num /= x;}while (!EmptyStack(st)){cout << GetTop(st);PopTop(st);}DestroyStack(st);
}
测试结果:

传送们:实验三
相关文章:
【数据结构】宜宾大学-计院-实验四
栈和队列之(栈的基本操作) 实验目的:实验内容:实验结果:实验报告:(及时撰写实验报告):实验测试结果:代码实现1.0:(C/C)【含注释】代码…...
selenium的IDE插件进行录制和回放并导出为python/java脚本(10)
Selenium IDE:Selenium Suite下的开源Web自动化测试工具,是Firefox或者chrome的一个插件,具有记录和回放功能,无需编程即可创建测试用例,并且可以将用例直接导出为可用的python/java等编程语言的脚本。 我们以chrome浏…...
从0到1封装一个image/pdf预览组件
iShot_2024-10-14_16.47.10 目录结构 content.vue <template><div class"no-content-block"><i class"iconfont icondocument large-file" /><div class"text-wrapper">{{ t(__ui__.siPreview.previewSupported) }}<…...
Android build子系统(02)Ninja语法与复杂依赖构建解读
说明:本文将解读Ninja构建系统的基础语法和应用,同时给出一些示例便于理解和学习;给出一个复杂构建的基础demo,通过这个demo的分析理解复杂构建的内在逻辑和build.ninja编写法则;最后扩展之前Android Framework中构建b…...
JavaScript的第三天
目录 JS中的循环,使某些代码重复执行 一、for循环:重复执行某段代码,通常用于计数 1、for的语法结构 2、代码解析 3、代码尝试 4、循环重复相同的代码,可以让用户控制输出的次数(对该变量进行遍历) 5、循环…...
初识git · 有关模型
目录 前言: 有关开发模型 前言: 其实文章更新到这里的时候,我们已经学习了可以满足我们日常生活中的基本需求的指令了,但是为什么要更新本篇文章呢?是因为实际生活中我们对于开发工作,运维工作ÿ…...
基于SpringBoot+Vue+uniapp的海产品加工销售一体化管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
详细视频演示 请联系我获取更详细的视频演示 项目运行截图 技术框架 后端采用SpringBoot框架 Spring Boot 是一个用于快速开发基于 Spring 框架的应用程序的开源框架。它采用约定大于配置的理念,提供了一套默认的配置,让开发者可以更专注于业务逻辑而不…...
解锁机器人视觉与人工智能的潜力,从“盲人机器”改造成有视觉能力的机器人(下)
机器视觉产业链全景回顾 视觉引导机器人生态系统或产业链分为三个层次。 上游(供应商) 该机器人视觉系统的上游包括使其得以运行的硬件和软件提供商。硬件提供商提供工业相机、图像采集卡、图像处理器、光源设备(LED)、镜头、光…...
CORS预检请求配置流程图 srpingboot和uniapp
首先要会判断预检请求 还是简单请求 简单请求 预检请求 #mermaid-svg-1R9nYRa7P9Pll4AK {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-1R9nYRa7P9Pll4AK .error-icon{fill:#552222;}#mermaid-svg-1R9nYRa7P9Pll4…...
用Spring AI 做智能客服,基于私有知识库和RAG技术
Java智能客服系统运用RAG技术提升答疑精准度 基于Spring ai 的 RAG(检索增强生成)技术,Java智能客服系统能够利用私有知识库中的信息提供更准确的答疑服务。 它的核心思路是: 首先,将客服QA以Word形式导入到系统中&…...
TemporalBench:一个专注于细粒度时间理解的多模态视频理解的新基准。
2024-10-15,由威斯康星大学麦迪逊分校、微软研究院雷德蒙德等机构联合创建了TemporalBench,它通过大约10K个视频问答对,提供了一个独特的测试平台,用以评估各种时间理解和推理能力,如动作频率、运动幅度、事件顺序等。…...
网友提问:网上申请流量卡不通过怎么办?
网上申请流量卡不通过怎么办?网上办理流量卡不通过,说明你不符合办理此套餐的要求,可以选择其他套餐,或者其他运营商的流量卡申请试试。 我们不管是在京*、淘*、拼**哪个网站申请的流量卡,提交的申请信息都是由运营商…...
JavaWeb 22.Node.js_简介和安装
有时候,后退原来是向前 —— 24.10.7 一、什么是Node.js Node.js 是一个于 Chrome V8 的 JavaScript 运行时环境,可以使 JavaScript 运行在服务器端。使用 Node.js,可以方便地开发服务器端应用程序,如 Web 应用、API、后端服务&a…...
APIJSON的使用
APIJSON是一个用于简化后端接口开发的工具,在Java中可以按照以下步骤使用: 1. 引入依赖 在Java项目中,需要引入APIJSON的相关依赖。如果使用Maven,可以在pom.xml文件中添加以下依赖: <dependency><groupId…...
简单三步完成 Telegram 生态的 Web3 冷启动
在竞争激烈的 Web3 领域,强有力的启动往往能决定成败。Telegram 无疑当下最火热的流量池,是很多 Web3 项目冷启动阶段的必选项。 但眼看着好多项目在 Telegram 生态火速获取百万级甚至千万级别的用户,自己的项目要怎么开始做增长,…...
Go Wails 学习笔记:创建第一个项目
文章目录 1. 安装 Wails2. 创建 Wails 项目3. 项目结构4. 运行项目5. 构建项目6. 部署和发布总结 Wails 是一个用于构建跨平台桌面应用程序的框架,允许开发者使用前端技术(如 HTML、CSS、JavaScript)以及 Go 语言来开发桌面应用。本文基于官方…...
Postman使用-基础篇
前言 本教程将结合业界广为推崇和使用的RestAPI设计典范Github API,详细介绍Postman接口测试工具的使用方法和实战技巧。 在开始这个教程之前,先聊一下为什么接口测试在现软件行业如此重要? 为什么我们要学习Postman? 现代软件…...
LeetCode 202.快乐数
LeetCode 202.快乐数 C 思路: 用快慢指针来进行解答,可以将其看做一个回环链表,慢指针完成一次平方和操作,快指针完成两次平方和操作,当快慢指针相遇时,判断快慢指针是否为1(为1以后无论怎么取平方和都会为…...
Redis-03 持久化(RDB, AOF,混合持久化)及原理
1,持久化 Redis的持久化是必须的,当Redis服务宕机后,如果没有持久化,重启服务后redis中的数据都将丢失,所有的数据操作都将直连数据库,系统性能会大幅降低,所以在使用Redis做缓存服务时必须持久…...
TikTok账号策略:IP和网络环境的要求分析
在当今社交媒体迅猛发展的时代,TikTok作为一款短视频平台,凭借其独特的算法和庞大的用户基础,吸引了越来越多的内容创作者和营销人员。成功地运营一个TikTok账号,除了优质的内容创作外,良好的IP和网络环境也至关重要。…...
OpenClaw调用Qwen3-32B镜像成本实测:RTX4090D长任务Token消耗分析
OpenClaw调用Qwen3-32B镜像成本实测:RTX4090D长任务Token消耗分析 1. 为什么关注OpenClaw的Token消耗问题 第一次用OpenClaw完成文件整理任务时,我被账单吓了一跳——短短10分钟的操作消耗了近3万Token。这让我意识到:自动化助手的长期使用…...
【2026 最新】JDK 下载与安装:在 macOS 下使用 Homebrew 和 jenv 完美管理多版本 JDK
结合 Homebrew 和 jenv 是在 macOS 上管理多版本 JDK 的最佳实践。Homebrew 负责安装具体的 JDK 文件,而 jenv 负责在这些版本之间灵活切换。 Homebrew安装配置看下面的教程: 【2026 最新】Mac 终端神器 Homebrew 完全指南:从安装、换源加速…...
Phi-4-mini-reasoning在中小学数学辅导中的应用:自动解题与答案验证
Phi-4-mini-reasoning在中小学数学辅导中的应用:自动解题与答案验证 1. 模型介绍 Phi-4-mini-reasoning是一款专注于推理任务的文本生成模型,特别擅长处理数学题、逻辑题等需要多步分析和简洁结论输出的场景。与通用聊天模型不同,它更专注于…...
OpenClaw配置备份方案:Qwen3.5-9B模型迁移无忧指南
OpenClaw配置备份方案:Qwen3.5-9B模型迁移无忧指南 1. 为什么需要OpenClaw配置备份 上周我的MacBook突然黑屏送修,维修人员告诉我主板需要更换。那一刻我突然意识到:过去三个月精心调校的OpenClaw配置可能面临灭顶之灾。特别是那个与Qwen3.…...
揭秘.NET 9全新AI Runtime:如何绕过JIT瓶颈,让ONNX模型推理延迟直降41%?
第一章:.NET 9全新AI Runtime的架构演进与设计哲学.NET 9 引入了原生 AI Runtime,标志着运行时从通用计算平台向智能工作负载优先平台的关键跃迁。其核心并非简单叠加模型推理能力,而是重构执行模型——将提示工程、token 编排、异步流式推理…...
多租户下的系统业务开发过程探讨贝
一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作,需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释(因业务实际需要存储大数值关联字段)。 表的核心特性为Java 多线程密集读写,业务请求持续高…...
HY-Motion 1.0保姆级教程:从零配置GPU环境生成文生3D动作
HY-Motion 1.0保姆级教程:从零配置GPU环境生成文生3D动作 想用一句话就让3D角色动起来吗?比如,输入“一个人从椅子上站起来,然后伸展双臂”,电脑就能自动生成一段流畅、自然的3D骨骼动画。这听起来像是未来科技&#…...
你的SSH密钥可能已经过期了队
引言 在现代软件开发中,性能始终是衡量应用质量的重要指标之一。无论是企业级应用、云服务还是桌面程序,性能优化都能显著提升用户体验、降低基础设施成本并增强系统的可扩展性。对于使用 C# 开发的应用程序而言,性能优化涉及多个层面&#x…...
STM32CubeMX+正点原子LCD代码移植保姆级教程(STM32F103ZET6精英版实测)
STM32CubeMX与正点原子LCD代码无缝整合实战指南 第一次接触STM32CubeMX和正点原子开发板时,最令人头疼的莫过于将两者代码完美融合。特别是当你想使用正点原子那套经过千锤百炼的LCD驱动库,却发现它与CubeMX生成的HAL库存在各种兼容性问题。本文将手把手…...
紧急预警:2025年起欧盟UNECE R155强制要求车载C#代码具备可追溯性!3天内完成全链路TraceID植入的终极脚手架
第一章:UNECE R155合规性对车载C#中控系统的核心影响UNECE R155法规要求汽车制造商及关键零部件供应商建立并持续运行功能安全与网络安全管理体系(CSMS),这对基于.NET Framework/.NET 6构建的C#车载中控系统提出了结构性约束。中控…...
