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

数据结构---顺序栈、链栈

特点

typedef struct Stack { int* base; //栈底 int* top;//栈顶 int stacksize //栈的容量; }SqStack;
typedef struct StackNode { int data;//数据域 struct StackNode* next; //指针域 }StackNode,*LinkStack;

顺序栈

#define MaxSize 100
typedef struct Stack { int* base; int* top; int stacksize; }SqStack;//***********************************   基本操作函数  *******************************************int InitStack(SqStack& s)
{s.base = new int[MaxSize];s.top = s.base;s.stacksize = MaxSize;return 1;}int Push(SqStack& s, int e)		// Push入栈,到XXX	eg: pushd...
{if(s.top-s.base==s.stacksize)	return 0;*(s.top++) = e;		return 1;
}int Pop(SqStack& s, int e) {if(s.top==s.base)	return 0;e = *--s.top;	 return 1;		// 1、减减		2、指向栈顶元素		3、再给e
}	bool GetTop(SqStack& s, int e) {if(s.top=s.base)	return false;else   e = *--s.top;	return true;
}//********************************功能实现函数**************************************//void PushToStack(SqStack& s) {int n; int e; int flag;printf("请输入入栈元素个数(>=1):\n");scanf("%d", &n);for (int i = 0; i < n; i++){printf("请输入第%d个元素的值:", i + 1);scanf("%d", &e);flag = Push(s, e);if (flag)printf("%d已入栈\n", e);else { printf("栈已满!!!\n"); break; }}
}void PopFromStack(SqStack& s) {int n; int e; int flag;printf("请输入出栈元素个数(>=1):\n");scanf("%d", &n);for (int i = 0; i < n; i++){flag = Pop(s, e);if (flag)printf("%d已出栈\n", e);else { printf("栈已空!!!\n"); break; }}
}void GetTopOfStack(SqStack& s){int e; bool flag;flag = GetTop(s, e);if (flag)printf("栈顶元素为:%d\n", e);else printf("栈已空!!!\n");
}void memu() {printf("********1.入栈      2.出栈*********\n");printf("********3.取栈顶    4.退出*********\n");
}int main() {int choice = 0;;SqStack s;InitStack(s);switch (choice){case 1:PushToStack(s); break;case 2:PopFromStack(s); break;case 3:GetTopOfStack(s); break;;default:printf("输入错误!!!\n");break;}return 0;
}

链栈

typedef struct StackNode { int data; struct StackNode* next; }StackNode,*LinkStack;//***********************************   基本操作函数  *******************************************int InitStack(LinkStack &s)
{s = NULL;return 1;}int Push(LinkStack &s, int e)		
{StackNode* p;//生成新节点p = new StackNode;//赋值p->data = e;p->next = s;//压入栈顶s = p;return 1;
}bool Pop(LinkStack& s ,int& e)
{LinkStack p;if (s == NULL)return false;//栈空e = s->data;p = s;s = s->next;free(p);return true;
}bool GetTop(LinkStack &s, int &e) 
{if (s == NULL) return false;//栈顶为空e = s->data;return true;
}//********************************功能实现函数**************************************//void PushToStack(LinkStack& s) {int n; int e; int flag;printf("请输入入栈元素个数(>=1):\n");scanf("%d", &n);for (int i = 0; i < n; i++){printf("请输入第%d个元素的值:", i + 1);scanf("%d", &e);flag = Push(s, e);if (flag)printf("%d已入栈\n", e);}}void PopFromStack(LinkStack& s) {int n; int e; int flag;printf("请输入出栈元素个数(>=1):\n");scanf("%d", &n);for (int i = 0; i < n; i++){flag = Pop(s, e);if (flag)printf("%d已出栈\n", e);else { printf("栈已空!!!\n"); break; }}
}void GetTopOfStack(LinkStack& s){int e; bool flag;flag = GetTop(s, e);if (flag)printf("栈顶元素为:%d\n", e);else printf("栈已空!!!\n");
}void memu() {printf("********1.入栈			2.出栈*********\n");printf("********3.取栈顶元素    4.退出*********\n");
}int main() {int choice = 0;;LinkStack s;InitStack(s);switch (choice){case 1:PushToStack(s); break;case 2:PopFromStack(s); break;case 3:GetTopOfStack(s); break;;default:printf("输入错误!!!\n");break;}return 0;
}
http://www.lryc.cn/news/98612.html

相关文章:

  • 我的MacBook Pro:维护心得与实用技巧
  • Higress非K8S安装
  • QT--day4(定时器事件、鼠标事件、键盘事件、绘制事件、实现画板、QT实现TCP服务器)
  • hjm家族信托科技研究报告
  • [SQL挖掘机] - 视图相关操作
  • 【Quartus FPGA】EMIF DDR3 读写带宽测试
  • Flutter:flutter_local_notifications——消息推送的学习
  • Spring AOP (面向切面编程)原理与代理模式—实例演示
  • 什么是SCRUM认证体系 ?
  • DoIP学习笔记系列:(二)VN5620 DoIP测试配置实践笔记
  • Grafana - TDEngine搭建数据监测报警系统
  • ES6基础知识二:ES6中数组新增了哪些扩展?
  • 使用CRM分析数据有哪些功能?
  • 大数据课程综合实验案例---课设问题汇总
  • 基于Vue+Element Plus实现表格组件
  • MYSQL 主从复制
  • 网络安全领域关键信息泄露事件引发关注
  • AI 绘画Stable Diffusion 研究(一)sd整合包v4.2 版本安装说明
  • 夯实数字化转型安全地基,华东某农商行开源安全治理经验
  • 第G3周:CGAN|生成手势图像
  • wireshark导出H264裸流
  • Sentinel针对IP限流
  • S475支持 ModbusRTU 转 MQTT协议采集网关
  • js的变量
  • MicroPython for ESP32
  • 选择适合产品需求管理的项目管理系统,打造完美项目流程!
  • @monaco-editor/react组件CDN加载失败解决办法
  • java对象的强引用,弱引用,软引用,虚引用
  • ubuntu ssh
  • js:斐波那契额数列生成器Generator