当前位置: 首页 > news >正文

栈的相关基本操作实验

一、实验目的
1.掌握栈的存储结构的表示和实现方法;
2.掌握栈的入栈和出栈等基本操作算法实现;
3.了解栈在解决实际问题中的简单应用。

二、实验内容
1.建立顺序栈,并在顺序栈上实现入栈和出栈操作;
2.建立链栈,并在链栈上实现入栈和出栈操作。

三、实验要求
1.建立顺序栈,并在顺序栈上实现入栈和出栈操作;
(1)根据输入的栈中元素个数n和各元素值建立一个顺序栈,并输出栈中各元素值;
(2)将数据元素e入栈,并输出入栈后的顺序栈中各元素值;
(3)将顺序栈中的栈顶元素出栈,并输出出栈元素的值和出栈后顺序栈中各元素值;
2.建立链栈,并在链栈上实现入栈和出栈操作;
(1)根据输入的栈中元素个数和各元素值建立一个链栈,并输出链栈中各元素值, 观察输入的内容与输出的内容是否一致,特别注意栈顶元素的位置;
(2)将数据元素x入栈,并输出入栈后的链栈中各元素值;
(3)将链栈中的栈顶元素出栈,并输入出栈元素的值和出栈后链栈中各元素值。

#include<stdio.h> #define MAXSIZE 100 #include<bits/stdc++.h> using namespace std; typedef int SELemType; // SELemType类型根据实际情况而定,这里假设为int typedef struct { SELemType data[MAXSIZE]; int top; }SeqStack; // 栈初始化 void Init_SeqStack(SeqStack* s) { s->top = -1; } // 判断栈为空 int Empty_SeqStack(SeqStack* s) { if (s->top == -1) return 1; else return 0; } // 入栈 void Push_Stack(SeqStack *s, SELemType e) { if (s->top == MAXSIZE - 1) printf("Stack is full!\n"); else { s->top++; s->data[s->top] = e; } } // 出栈 void Pop_SeqStack(SeqStack* s, SELemType* e) { if (s->top == -1) printf("栈为空!\n"); else { *e = s->data[s->top]; s->top--; } } // 取栈顶元素 void Top_SeqStack(SeqStack* s, SELemType* e) { if (s->top == -1) printf("栈为空!\n"); else { *e = s->data[s->top]; printf("出栈成功!\n"); } } // 输出 void Output_SeqStack(SeqStack* s) { SeqStack* w; int i; printf("栈中的元素有:"); for (i = s->top; i >= 0; i--) printf("%d ", s->data[i]); printf("\n"); } //销毁 void Destroy_SeqStack(SeqStack* s) { s->top == -1; } //遍历 void Print_SeqStack(SeqStack* S) { while(S->top != -1) { cout<<S->data[S->top--]<<" "; } cout<<endl; } void Menu() { puts("****************"); puts("1.初始化"); puts("2.判断栈为空"); puts("3.入栈"); puts("4.出栈"); puts("5.取栈顶元素"); puts("6.销毁栈"); puts("7.遍历栈"); puts("0.程序结束"); puts("****************"); } // 主函数 int main() { SeqStack S; int choice = -1, i,n; SELemType e; Menu(); while (choice == -1) { printf("\nYour choice is:\n"); scanf("%d", &i); switch (i) { case 1: Init_SeqStack(&S); printf("初始化完成!\n"); break; case 2: if(Empty_SeqStack(&S) == 1) printf("栈为空!\n"); else printf("栈不为空!\n"); break; case 3: printf("请输入入栈的数量:\n"); scanf("%d", &n); printf("请输入需要入栈的数据,用空格隔开:\n"); for (int j = 0; j < n; j++) { scanf("%d", &e); Push_Stack(&S, e); } Output_SeqStack(&S); break;; case 4: Pop_SeqStack(&S, &e); Output_SeqStack(&S); break; case 5: Top_SeqStack(&S, &e); printf("栈顶元素为:%d\n", e); Output_SeqStack(&S); break; case 6: Destroy_SeqStack (&S); printf("栈销毁成功!\n"); case 7: Print_SeqStack(&S); Output_SeqStack(&S); case 0: choice = 0; break; default:printf("选择有误,请重新选择! \n"); } } puts("\n"); //puts("\t\t\t\t By Cherish599"); return 0; }
http://www.jsqmd.com/news/537212/

相关文章:

  • .NET eShop 开源项目教程
  • STM32F1 RTC时间戳跨天同步:CUBEMX配置与HAL库优化实践
  • OWL ADVENTURE部署前准备:保姆级Windows系统瘦身与C盘清理指南
  • **基于Solidity的Layer2方案设计与实现:从Rollup到Optimistic的实战探索**在区块链生态中,La
  • 【考毕兹振荡器multisum仿真起振】2023-4-19
  • KART-RERANK集成开发实战:Keil5工程管理与固件库文档智能检索插件
  • 【2025最新】基于SpringBoot+Vue的校运会管理系统管理系统源码+MyBatis+MySQL
  • nli-distilroberta-base企业实操:政务问答系统中立性与矛盾识别模块
  • OpenClaw+Qwen3-32B成本优化:RTX4090D本地推理节省90%API费用
  • LFM2.5-1.2B-Thinking-GGUF快速部署:CSDN平台一键克隆→启动→分享链接三步到位
  • 产品结构与BOM管理**:支持多层BOM(EBOM、MBOM、DBOM)、版本控制、变更影响分析
  • MobileIMSDK WebSocket客户端开发终极指南:H5、小程序与鸿蒙Next端完整适配方案
  • PP-DocLayoutV3入门必看:从合同识别到论文排版检查的全流程实操指南
  • Uvicorn源码中的中介者模式:组件通信与解耦设计
  • RWKV7-1.5B-g1a保姆级教程:如何查看GPU利用率(nvidia-smi)与模型实际显存占用
  • # BurpSuite 与 Python 自动化渗透测试:从手动到脚本化的革命性实践 在现代网络安全攻防
  • pdf2htmlEX重构风险管理:减轻重构对项目的影响
  • OpenClaw+nanobot极简办公:QQ机器人触发日程管理
  • Pi0机器人控制中心开发者案例:基于LeRobot构建可扩展VLA控制中台
  • Cobalt 开源项目教程
  • camunda如何处理流程待办任务
  • 2026成都家庭桶装水选购评测深度解析:矿泉水高端定制、纯净水定制、送桶装水配送公司、送水电话附近、附近水站桶装水配送选择指南 - 优质品牌商家
  • 论文党救星[特殊字符]Paperxie:用 AI 搞定本科毕业论文,绘图 / 排版 / AI 率全不愁
  • 二、AGENTS.md 核心结构:写清楚什么,执行就不跑偏
  • GNU Radio流复用与解复用终极指南:如何实现多路信号并行处理
  • 浙江静电测试闸机厂家专业度深度评测报告:浙江人行通道闸机、浙江全高旋转闸、浙江写字楼闸机、浙江半导体静电闸机、浙江小区闸机选择指南 - 优质品牌商家
  • Seed-Coder-8B-Base体验报告:这个开源代码模型到底强在哪里?
  • Apache Pinot终极指南:实时分析在电商、金融、物联网等行业的10大应用案例
  • 单链表的基本操作
  • Baseweb表单文件上传组件:从基础到拖拽上传的完整指南