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

数据结构--栈代码实现

前言

本文介绍了数据结构中一种特殊的线性存储方式——栈

性质:先进后出(FILO)

例如现实生活中的叠盘子与烤串,只能从顶部存入和取出

代码实现

静态栈

头文件:

SqStack.h #include<iostream> using namespace std; #define MaxSize 10 typedef int ElemType; typedef struct { ElemType data[MaxSize]; int top; }SqStack; //初始化 void InitStack(SqStack& S); //入栈 bool Push(SqStack& S, ElemType e); //出栈 bool Pop(SqStack& S, ElemType& e); //获取栈顶元素 bool GetTop(SqStack& S, ElemType& e);

函数实现文件:

SqStack.cpp #include"SqStack.h" //初始化 void InitStack(SqStack& S) { S.top = -1; } //入栈 bool Push(SqStack& S, ElemType e) { if (S.top == MaxSize - 1) return false; S.data[++S.top] = e; return true; } //出栈 bool Pop(SqStack& S, ElemType& e) { if (S.top == -1) return false; e = S.data[S.top--]; return true; } //获取栈顶元素 bool GetTop(SqStack& S, ElemType& e) { if (S.top == -1) return false; e = S.data[S.top]; return true; }

测试文件:

test1.cpp #include"SqStack.h" void fun1() { SqStack S; InitStack(S); Push(S, 1); Push(S, 2); Push(S, 3); ElemType e; if (Pop(S, e)) { cout << e << endl; } else cout << "Pop fail" << endl; if (GetTop(S, e)) { cout << e << endl; } else cout << "Get top Fail" << endl; } int main() { fun1(); return 0; }

动态栈(链表)

头文件

LiStack.h #pragma once #include<iostream> using namespace std; typedef int ElemType; typedef struct LinkNode { ElemType data; struct LinkNode* next; }*LiStack; //初始化 void InitLiStack(LiStack& S); //入栈 void Push(LiStack& S, ElemType e); //出栈 bool Pop(LiStack& S, ElemType& e); //获取栈顶元素 bool GetTop(LiStack S, ElemType& e);

实现文件:

LiStack.cpp #include"LiStack.h" //初始化 void InitLiStack(LiStack& S) { S = NULL; } //入栈 void Push(LiStack& S, ElemType e) { LinkNode* s = new LinkNode; s->data = e; s->next = S; S = s; } //出栈 bool Pop(LiStack& S, ElemType& e) { if (!S) return false; e = S->data; LinkNode* p = S; S = S->next; free(p); return true; } //获取栈顶元素 bool GetTop(LiStack S, ElemType& e) { if (!S) return false; e = S->data; return true; }

实现文件

#include"LiStack.h" //void fun1() //{ // SqStack S; // InitStack(S); // Push(S, 1); // Push(S, 2); // Push(S, 3); // // ElemType e; // if (Pop(S, e)) // { // cout << e << endl; // } // else cout << "Pop fail" << endl; // // if (GetTop(S, e)) // { // cout << e << endl; // } // else cout << "Get top Fail" << endl; // //} void fun2() { LiStack S; InitLiStack(S); Push(S, 1); Push(S, 2); Push(S, 3); ElemType e; if (Pop(S, e)) { cout << e << endl; } else cout << "Pop fail" << endl; if (GetTop(S, e)) { cout << e << endl; } else cout << "Get top Fail" << endl; } int main() { fun2(); return 0; }
http://www.jsqmd.com/news/461338/

相关文章:

  • Java面向对象—JDBC
  • 基于springboot的小米电商平台系统设计与实现设计与开发(源码+精品论文+答辩PPT等资料)
  • DeepSeek大模型驱动的空间智能引擎——镜像视界构建“人工智能+空间计算”新一代智能感知体系技术白皮书
  • 测试文章标题
  • 论成功与合作
  • 自研 Ollama 企业级网关:本地大模型生产化落地的工程化实践
  • 基于大数据爬虫+Hadoop+空气质量指数数据分析可视化设计与开发(源码+精品论文+答辩PPT等资料)
  • 1987年7月11日下午15-17点出生性格、运势和命运
  • AI证书纯线上考?过来人告诉你,这些“线上”环节的坑千万别踩!
  • Ubuntu 20.04 下 OpenClaw(龙虾)本地化部署保姆级教程
  • 深度解读C# 11 的 Required 成员:编译期状态验证强化
  • 认错贴 爱因斯坦经典5人逻辑题
  • 百度网盘下载太慢怎么办,如何提高网盘下载速度?
  • 2026年降AIGC率工具横评:便宜的和贵的差距到底有多大
  • 2026年DeepSeek写论文AI率太高?这5款降AI工具亲测有效
  • V-Ray 光照贴图烘焙参数适配教程
  • 基于BiGRU双向门控循环单元的锂电池SOH估计 [电池特征提取+SOH估计]Matlab代码(多输入单输出)
  • 虚拟机安装ngxin
  • Linux:读写锁与自旋锁
  • 多无人机动态避障路径规划研究:基于遗传算法GA的复杂三维山体环境下多无人机动态避障路径规划研究(可以自定义无人机数量及起始点),MATLAB代码
  • OpenClaw 记忆系统终极指南:从“金鱼记忆”到永不失忆(MemOS 插件 + 4 大社区实战方法)
  • 杰理之1. 启动解码和关闭解码【篇】
  • eNSP启动报:43
  • 杰理之Page Scan连接扫描【篇】
  • 告别边界噩梦:LeetCode Hot 100 高频漏等号场景全解析
  • GEO优化发布测试22:35:07
  • 最小二乘问题详解15:束平差原理与基础实现
  • openclaw在windows和mac上的安装以及AI技术中的几个关键概念,包括大模型、MCP协议、Skills、智能体和OpenClaw。
  • 基于 SpringBoot 和 Vue 的高效社团管理系统项目分享
  • 测试文章01