大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 使用隊列實現(xiàn)堆棧

使用隊列實現(xiàn)堆棧

更新時間:2022-07-01 09:26:10 來源:動力節(jié)點 瀏覽1228次

可以使用兩個隊列來實現(xiàn)Java堆棧。讓要實現(xiàn)的堆棧為“s”,用于實現(xiàn)的隊列為“q1”和“q2”。Stack 's' 可以通過兩種方式實現(xiàn):

方法1:通過使 push 操作代價高昂

該方法確保新進入的元素始終位于 'q1' 的前面,因此 pop 操作只是從 'q1' 出列。'q2' 用于將每個新元素放在 'q1' 的前面。

1.push(s, x)操作的步驟描述如下:

將 x 排入隊列 q2

從 q1 逐一出列并入隊到 q2。

交換 q1 和 q2 的名稱

2.pop(s)操作的功能描述如下:

從 q1 中取出一個項目并返回它。

下面是上述方法的實現(xiàn):

/* Java Program to implement a stack using
two queue */
import java.util.*;
class GfG {
	static class Stack {
		// Two inbuilt queues
		static Queue<Integer> q1 = new LinkedList<Integer>();
		static Queue<Integer> q2 = new LinkedList<Integer>();
		// To maintain current number of
		// elements
		static int curr_size;
		Stack()
		{
			curr_size = 0;
		}
		static void push(int x)
		{
			curr_size++;
			// Push x first in empty q2
			q2.add(x);
			// Push all the remaining
			// elements in q1 to q2.
			while (!q1.isEmpty()) {
				q2.add(q1.peek());
				q1.remove();
			}
			// swap the names of two queues
			Queue<Integer> q = q1;
			q1 = q2;
			q2 = q;
		}
		static void pop()
		{
			// if no elements are there in q1
			if (q1.isEmpty())
				return;
			q1.remove();
			curr_size--;
		}
		static int top()
		{
			if (q1.isEmpty())
				return -1;
			return q1.peek();
		}
		static int size()
		{
			return curr_size;
		}
	}
	// driver code
	public static void main(String[] args)
	{
		Stack s = new Stack();
		s.push(1);
		s.push(2);
		s.push(3);
		System.out.println("current size: " + s.size());
		System.out.println(s.top());
		s.pop();
		System.out.println(s.top());
		s.pop();
		System.out.println(s.top());
		System.out.println("current size: " + s.size());
	}
}
// This code is contributed by Prerna

輸出

當(dāng)前尺寸:3
3
2
1
當(dāng)前尺寸:1

方法2:通過使pop操作成本高

在push操作中,新元素總是排隊到q1。在 pop() 操作中,如果 q2 為空,則除了最后一個元素之外的所有元素都被移動到 q2。最后最后一個元素從 q1 出列并返回。

1.push(s, x)操作:

將 x 排入隊列 q1(假設(shè) q1 的大小是無限的)。

2.彈出操作:

除了從 q1 到 q2 的最后一個元素,一個接一個地從隊列中取出所有元素。

將q1的最后一項出隊,出隊的項就是result,存儲起來。

交換 q1 和 q2 的名稱

返回步驟 2 中存儲的項目。

/* Java Program to implement a stack
using two queue */
import java.util.*;
class Stack {
	Queue<Integer> q1 = new LinkedList<>(), q2 = new LinkedList<>();
	int curr_size;
	public Stack()
	{
		curr_size = 0;
	}
	void remove()
	{
		if (q1.isEmpty())
			return;
		// Leave one element in q1 and
		// push others in q2.
		while (q1.size() != 1) {
			q2.add(q1.peek());
			q1.remove();
		}
		// Pop the only left element
		// from q1
		q1.remove();
		curr_size--;
		// swap the names of two queues
		Queue<Integer> q = q1;
		q1 = q2;
		q2 = q;
	}
	void add(int x)
	{
		q1.add(x);
		curr_size++;
	}
	int top()
	{
		if (q1.isEmpty())
			return -1;
		while (q1.size() != 1) {
			q2.add(q1.peek());
			q1.remove();
		}
		// last pushed element
		int temp = q1.peek();
		// to empty the auxiliary queue after
		// last operation
		q1.remove();
		// push last element to q2
		q2.add(temp);
		// swap the two queues names
		Queue<Integer> q = q1;
		q1 = q2;
		q2 = q;
		return temp;
	}
	int size()
	{
		return curr_size;
	}
	// Driver code
	public static void main(String[] args)
	{
		Stack s = new Stack();
		s.add(1);
		s.add(2);
		s.add(3);
		s.add(4);
		System.out.println("current size: " + s.size());
		System.out.println(s.top());
		s.remove();
		System.out.println(s.top());
		s.remove();
		System.out.println(s.top());
		System.out.println("current size: " + s.size());
	}
}
// This code is contributed by Princi Singh

輸出

當(dāng)前尺寸:4
4
3
2
當(dāng)前尺寸:2

以上就是關(guān)于“使用隊列實現(xiàn)堆棧”的介紹,大家如果想了解更多相關(guān)知識,不妨來關(guān)注一下動力節(jié)點的Java隊列教程,里面有更豐富的知識等著大家去學(xué)習(xí),相信對大家會有很大幫助的。

提交申請后,顧問老師會電話與您溝通安排學(xué)習(xí)

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 久久99精品这里精品3 | 国产高清区 | 天天毛片 | 色在线网站 | 欧美日韩久久毛片 | 激情五月色婷婷在线观看 | 婷婷国产 | 99这里有精品视频 | 邵氏经典三级50部 | 狠狠干夜夜草 | 亚洲性一级理论片在线观看 | 中文字幕丝袜在线56页 | 免费人成在线观看69式小视频 | 久久ww精品w免费人成 | 中文字幕精品一区二区三区视频 | 伊伊综合网 | 一区二区中文字幕亚洲精品 | 久久国产热视频 | 欧美一级片网 | 亚洲国产综合自在线另类 | 九九热精品视频在线播放 | 久久2019| 我就色色综合网 | 色综合啪啪 | 奇米第四色视频 | 91精品日本久久久久久牛牛 | 亚洲成人手机在线观看 | 玖玖国产 | 国产99视频精品免费视频免里 | 成人亚洲欧美综合 | 国产欧美另类久久久精品免费 | 久久成 | 国产成人精品曰本亚洲77美色 | 日韩欧美一级毛片在线 | 久久大香香蕉国产免费网站 | 久久色婷婷 | 一级欧美在线的视频 | www4虎| 农村寡妇一级毛片免费看视频 | 天啪天干在线视频 | 久久精品国产视频 |