C++:用一维数组实现双栈,含入栈出栈及边界处理代码
```cpp #include <iostream> #include <cstdlib> #define maxsize 10 typedef struct { int* stack; //初始化后栈内均为 0 int top[2]; // top 为两个栈顶指针,记录了栈顶元素在数组中的下标。top[0]表示 0 栈,top[1]表示 1 栈 //初始情况 top[0]=-1,top[1]=maxsize }dualstack; void push(dualstack &s,int i,int x) { if (i == 0 && s.top[0] + 1 == s.top[1]) { // 0 号栈满 std::cout << "栈满" << std::endl; return; } if (i == 1 && s.top[1] - 1 == s.top[0]) { // 1 号栈满 std::cout << "栈满" << std::endl; return; } if (i == 0) { s.stack[++s.top[0]] = x; } else { s.stack[--s.top[1]] = x; } } int pop(dualstack &s,int i) { int ret = -1; if (i == 0 && s.top[0] == -1) { // 0 号栈空 std::cout << "0 号栈空" << std::endl; return ret; } if (i == 1 && s.top[1] == maxsize) { // 1 号栈空 std::cout << "1 号栈空" << std::endl; return ret; } if (i == 0) { ret = s.stack[s.top[0]--]; } else { ret = s.stack[s.top[1]++]; } return ret; } ``` 额外需要注意的逻辑点: 1. 对于边界情况的判断要准确,比如栈满和栈空的条件。 2. 入栈和出栈操作时,对栈顶指针的更新要正确,避免出现越界等错误。 3. 代码的可读性和可维护性很重要,建议添加更多的注释来解释关键逻辑。 ######[AI写代码神器 | 543点数解答 | 2024-11-29 09:50:17]
- Python 实现球类:精准计算半径、表面积与体积,附输入验证与异常处理!(阿里通义 | 261点数解答 | 2024-11-28 21:19:39)343
- CentOS下Java进程出现futex_wait_queue_me问题的处理全流程(阿里通义 | 283点数解答 | 2023-11-20 14:51:26)459
- 替雷利珠单抗致免疫相关性糖尿病:病例报道与机制探讨,为临床用药敲响警钟( | 164点数解答 | 2024-10-11 14:52:52)264
- C++实现计算最少添加数字次数以匹配两个数组元素(字节豆包 | 714点数解答 | 2026-03-08 19:44:54)13
- 51 单片机:定时器 0 实现 8 个 LED 循环点亮,附代码及优化建议(字节豆包 | 1193点数解答 | 2024-12-27 15:10:29)310
- 用 JS 中 for 循环实现 1 到 100 相加并输出结果到页面的完整代码 ( | 240点数解答 | 2024-05-20 22:11:29)457
- 用 JS 的 while 循环实现 1 到 100 相加并输出到页面的代码揭秘( | 47点数解答 | 2024-05-20 22:16:48)355
- JavaScript开发:为何 React 的 useState 用数组而非对象?优势揭秘!(阿里通义 | 202点数解答 | 2023-11-09 01:54:01)288
- C#工程师必知:数组、链表、哈希、队列、栈数据结构优缺点大揭秘! (百度文心 | 561点数解答 | 2023-11-09 17:56:30)260
- 补全代码:精准判断变量 a 是否为数组类型( | 115点数解答 | 2024-05-20 21:58:29)331
- Java 实现:从数组提取姓名并匹配同姓人员信息与数量(字节豆包 | 333点数解答 | 2024-09-10 11:58:36)203
- JS实现数组 ['0', '3'] 到多种格式字符串转换全攻略(百度文心 | 511点数解答 | 2024-10-15 11:05:43)186