PHP/Golang实现—数据结构之两栈共享空间

该博客介绍了如何使用PHP和Golang实现数据结构中的两栈共享空间,通过顺序栈来优化内存利用率。目前提供了PHP版本的代码,后续计划添加Golang版本并持续更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

客官,留下你的赞;成为我的粉丝,一起上车哦!评论区欢迎你的留言

重温数据结构。相关代码集放在GitHub上,欢迎StarFork和一起加入。目前只有PHP版本;后续会增加Golang版本,后续会不断更新,欢迎指正。
代码示例
/**
 * 顺序栈之两栈共享空间
 * @author new1024kb
 */

class Stack {

	/**
	 * [$top1 指向栈1的栈顶(数组的首部)]
	 * @var [type]
	 */
	public $top1;

	/**
	 * [$top2 指向栈2的栈顶(数组的尾部)]
	 * @var [type]
	 */
	public $top2;

	/**
	 * [$stackSpace 栈空间大小]
	 * @var [type]
	 */
	public $stackSpace;

	/**
	 * [$stackElement 栈中元素]
	 * @var [type]
	 */
	public $stackElement;

	/**
	 * [__construct 初始化]
	 * @Author   pengw
	 * @DateTime 2020-06-22T00:47:06+0800
	 * @param    int|integer              $stackSpace [栈大小]
	 */
	public function __construct(int $stackSpace = 0) {

		$this->top1 = -1;
		$this->top2 = $stackSpace;
		$this->stackSpace = $stackSpace;
		$this->stackElement = array_fill(0, $stackSpace, NULL);
	}

	/**
	 * [push 入栈操作]
	 * @Author   pengw
	 * @DateTime 2020-06-22T00:47:19+0800
	 * @param    string                   $element   [入栈元素]
	 * @param    int|integer              $stackType [1表示1号栈 2表示2号栈]
	 * @return   [string]                            [description]
	 */
	public function push(string $element, int $stackType = 1): string {

		if(empty($this->stackSpace)) {
			return '未分配栈空间';
		}

		if(!in_array($stackType, [1, 2])) {
			return '栈选择有误';
		}

		// 栈满
		if(($this->top1 + 1) == $this->top2) {
			return '栈满';
		}

		// 向1栈插入数据
		if($stackType == 1) {
			++$this->top1;
			$this->stackElement[$this->top1] = $element;
		}

		// 向2栈插入数据
		if($stackType == 2) {
			--$this->top2;
			$this->stackElement[$this->top2] = $element;
		}

		return '入栈成功';
	}

	/**
	 * [pop 出栈操作]
	 * @Author   pengw
	 * @DateTime 2020-06-22T00:48:07+0800
	 * @param    int|integer              $stackType [1表示1号栈 2表示2号栈]
	 * @return   [string]                            [description]
	 */
	public function pop(int $stackType = 1): string {

		if(empty($this->stackSpace)) {
			return '未分配栈空间';
		}

		if(!in_array($stackType, [1, 2])) {
			return '栈选择有误';
		}

		// 栈1 空栈
		if($stackType == 1 && $this->top1 == -1) {
			return '栈1 空栈';
		}

		// 栈2 空栈
		if($stackType == 2 && $this->top2 == $this->stackSpace) {
			return '栈2 空栈';
		}

		if($stackType == 1) {
			$e = $this->stackElement[$this->top1];
			$this->stackElement[$this->top1] = NULL;
			--$this->top1;
		}

		if($stackType == 2) {
			$e = $this->stackType[$this->top2];
			$this->stackType[$this->top2] = NULL;
			++$this->top2;
		}

		return $e;
	}

	/**
	 * [showStackElement 显示栈中的元素]
	 * @Author   pengw
	 * @DateTime 2020-06-22T00:48:53+0800
	 * @param    int|integer              $stackType [0表示两个栈的元素 1表示1号栈 2表示2号栈]
	 * @return   [array]                             [description]
	 */
	public function showStackElement(int $stackType = 0): array {

		if($stackType == 0) {
			return $this->stackElement;
		}

		if($stackType == 1) {
			return array_slice($this->stackElement, 0, $this->top1 + 1);
		}

		if($stackType == 2) {
			return array_slice($this->stackElement, $this->top2);
		}

		return [];
	}
}

测试

$s = new Stack(6);
var_dump($s->push(9, 1));
var_dump($s->push(8, 1));
var_dump($s->push(7, 1));
var_dump($s->push(6, 1));
var_dump($s->push(5, 1));
var_dump($s->push(4, 1));
var_dump($s->push(3, 1));
var_dump($s->showStackElement(0));

结果
在这里插入图片描述

很抱歉,我无法提供具体的2024年前端面试题百道,因为面试题的内容和形式可能会因公司、职位和行业而异。不过,我可以提供些通用的前端面试题,以帮助您准备面试。 1. 请简述前端开发的主要技术栈包括哪些? 2. 请描述下什么是HTML、CSS和JavaScript? 3. 请解释下什么是响应式设计?如何在前端开发中实现响应式设计? 4. 请简述下什么是前端框架,并列举几个常用的前端框架。 5. 请解释下什么是Vue.js,并简述其核心概念和用法。 6. 请解释下什么是React.js,并简述其核心概念和用法。 7. 请简述下什么是Webpack,并解释其作用和用法。 8. 请解释下什么是ES6,并列举些ES6的新特性。 9. 请简述下什么是前端性能优化,并列举些优化技巧。 10. 请解释下什么是HTTP/2,并简述其优点和缺点。 除了以上问题,您还可以准备些更具体的问题,例如: 1. 请解释下如何使用CSS选择器选择元素? 2. 请解释下如何使用JavaScript操作DOM? 3. 请描述下如何使用Vue.js实现个简单的计数器组件。 4. 请解释下如何使用React.js实现个简单的表单组件。 5. 请描述下如何使用Webpack进行代码拆分和优化。 6. 请解释下什么是跨域问题,并简述如何解决跨域问题。 7. 请描述下如何使用JavaScript进行异步编程,例如使用Promise和async/await。 8. 请解释下什么是前端安全,并列举些常见的安全问题及其解决方法。 希望以上信息对您有所帮助,祝面试成功!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值