news 2026/5/25 1:57:32

考研数据结构代码实现之顺序栈(基于王道书)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
考研数据结构代码实现之顺序栈(基于王道书)

代码实现基于王道书上给的代码,代码如有缺陷之处,欢迎指正~

说明:

· .h文件用于声明

· .cpp文件用于定义

· main.cpp 用于测试

:代码在VS2022调试测试

顺序栈:

Sqstack.h
#pragma once #include<stdio.h> #include<stdlib.h> // 基本操作 //• InitStack(&S) :初始化一个空栈S。 //• StackEmpty(S) : 判断栈是否为空。若栈S为空,返回true;否则返回false。 //• Push(&S, x) : 入栈操作;若栈未满,则x成为新的栈顶元素。 //• Pop(&S, &x) : 出栈操作;若栈非空,则弹出栈顶元素,并通过x返回该值。 //• GetTop(S, &x) : 读取栈顶元素但不出栈;若栈非空,则通过x返回栈顶元素。 //• DestroyStack(&S) : 销毁栈S,并释放其所占用的存储空间(&表示引用调用)。 #define MaxSize 50 #define ElemType int typedef struct { ElemType data[MaxSize]; int top; // 栈顶指针 }Sqstack; void InitStack(Sqstack& s); bool StackEmpty(Sqstack s); bool Push(Sqstack& s, ElemType x); bool Pop(Sqstack& s, ElemType& x); bool GetTop(Sqstack s, ElemType& x);
Sqstack.cpp
#include "Sqstack.h" void InitStack(Sqstack& s) { s.top = -1; // 初始栈顶指针为-1 } bool StackEmpty(Sqstack s) { if (s.top == -1) return true; else return false; } bool Push(Sqstack& s, ElemType x) { if (s.top == MaxSize - 1) return false; // 栈满 s.data[++s.top] = x; // 栈顶指针先加一在入栈元素 return true; } bool Pop(Sqstack& s, ElemType& x) { if (s.top == -1) return false; // 栈空 x = s.data[s.top--]; // 先出栈,指针在减一 return true; } bool GetTop(Sqstack s, ElemType& x) { if (s.top == -1) return false; // 栈空 x = s.data[s.top]; return true; }
main.cpp
#include "Sqstack.h" #include <stdio.h> // 测试代码 int main() { Sqstack s; ElemType e; int i; // 1. 初始化栈 InitStack(s); printf("初始化栈完成。\n"); // 2. 判断栈是否为空 printf("栈是否为空?%s\n\n", StackEmpty(s) ? "是" : "否"); // 3. 入栈操作:压入1~10 printf("开始入栈:"); for (i = 1; i <= 10; i++) { if (Push(s, i)) printf("%d ", i); else printf("\n入栈失败:%d (栈满)\n", i); } printf("\n\n"); // 4. 取栈顶元素(不出栈) if (GetTop(s, e)) printf("当前栈顶元素为:%d\n", e); else printf("取栈顶失败(栈空)\n"); printf("\n"); // 5. 出栈操作:弹出3个元素 printf("开始出栈:"); for (i = 1; i <= 3; i++) { if (Pop(s, e)) printf("%d ", e); else printf("\n出栈失败\n"); } printf("\n\n"); // 6. 再次取栈顶 if (GetTop(s, e)) printf("出栈3个元素后,栈顶元素变为:%d\n", e); else printf("取栈顶失败(栈空)\n"); printf("\n"); // 7. 继续入栈直到栈满(测试边界) printf("继续入栈直到栈满:\n"); i = 11; while (Push(s, i)) { printf("入栈 %d 成功。\n", i); i++; } printf("栈已满,无法再入栈元素:%d\n\n", i); // 8. 测试栈空 / 栈满状态下的非法操作 printf("尝试在栈满时继续入栈:"); if (!Push(s, 999)) printf("失败(栈满)\n"); else printf("成功?异常\n"); printf("尝试从栈中弹出所有元素:"); while (Pop(s, e)) printf("%d ", e); printf("\n"); printf("尝试在栈空时出栈:"); if (!Pop(s, e)) printf("失败(栈空)\n"); else printf("成功?异常\n"); printf("尝试在栈空时取栈顶:"); if (!GetTop(s, e)) printf("失败(栈空)\n"); else printf("成功?异常\n"); // 9. 最终判空 printf("\n最终栈是否为空?%s\n", StackEmpty(s) ? "是" : "否"); return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 1:56:33

CAXA 引出说明

位置同 CAD 里引线。效果示例设置样式默认样式&#xff0c;GB_引出说明&#xff08;1984&#xff09;Tip&#xff1a;如果引线样式需求是和标注样式一致&#xff0c;就使用“标注” 这一个样式就可以了。场景例如&#xff0c;标注比例是 1:4&#xff1b;但有个地方需要用文字引…

作者头像 李华
网站建设 2026/5/25 1:50:59

ARM SME指令集:矩阵运算加速与USMLALL/USMOP4A实战

1. SME指令集概述&#xff1a;矩阵加速的ARM新利器在当今计算密集型应用如机器学习、信号处理和科学计算的推动下&#xff0c;现代处理器架构不断演进以提供更高效的矩阵运算能力。ARMv9架构引入的SME&#xff08;Scalable Matrix Extension&#xff09;指令集扩展&#xff0c;…

作者头像 李华
网站建设 2026/5/25 1:46:34

ARM SME架构下的浮点外积运算优化实践

1. ARM SME架构与浮点外积运算概述在当代处理器设计中&#xff0c;SIMD&#xff08;单指令多数据&#xff09;架构已成为提升计算性能的关键技术。ARMv9引入的SME&#xff08;Scalable Matrix Extension&#xff09;指令集将这种并行计算能力提升到了矩阵运算层面&#xff0c;特…

作者头像 李华