1. 程式人生 > >手寫還算好用的 queue和Dequeue 為STL依賴黨做些微小的工作 佇列和雙端佇列

手寫還算好用的 queue和Dequeue 為STL依賴黨做些微小的工作 佇列和雙端佇列

之前一直依賴STL,在無數次TLE的漩渦中。。本萌新終於下定決心手寫了queue和dequeue微笑

首先是Queue,實現的功能有:

1.push,pop,front,empty 這四個基本操作

2.附帶兩個函式next和pre,用於在陣列模擬佇列的時候方便獲取下一個位置,防止下標越界

3.內部有報錯

侷限性:

1.目前這個只能是int型別。。

2.其實最大長度是固定的,一開始就要設定好,預設為1。設定方式就是:Queue u(999);放在建構函式當中了

3.建構函式中用了data=new int[x]; 

PS:可以一開始用STL的寫了之後,把這個複製過去,把queue<int>全部替換成Queue就行了。

Queue程式碼如下:

struct Queue
{
	int f,r;
	int *data;
	int sz;
	Queue(int x=1)
	{
		f=r=0;
		sz=x;
		data=new int[x];
	}
	int next(int x) {return (x+1)%sz;}
	int pre(int x) {return (sz+x-1)%sz;}
	bool push(int x)
	{
		if(next(r)==pre(f))
		{
			cout<<"Error!Crash!"<<endl;
			return false;
		}
		data[r]=x;
		r=next(r);
		return true;
	}
	int front()
	{
		if(f==r) cout<<"Error!Empty!"<<endl;
		return data[f];
	}
	void pop()
	{
		if(f==r) cout<<"Error!Empty!"<<endl;
		else f=next(f);
	}
	bool empty(){return f==r;}
};

其次是之後寫的Dequeue,實現基本仿造Queue,實現功能:

1.push,pop,front,empty這四個Queue操作

2.next,pre同上

3.back,push_front,pop_back分別是Dequeue多出來的“隊尾的元素”,“從隊首入隊”,“從隊尾出隊”

4.內部有報錯

侷限性同上。。

Dequeue程式碼如下:

struct Dequeue
{
	int data*;
	int sz;
	int f,r;
	
	Dequeue(int x=1)
	{
		data=new int[x];
		sz=x;
		f=r=0;
	}
	int next(int x) {return (x+1)%sz;}
	int pre(int x) {return (x+sz-1)%sz;}
	bool empty() {return f==r;}
	
	bool push(int x)
	{
		if(next(r)==pre(f))
		{
			cout<<"Error!Crash!"<<endl;
			return false;
		}
		data[r]=x;
		r=next(r);
		return true;
	}
	void pop()
	{
		if(empty())
			cout<<"Error!Empty!"<<endl;
		else f=next(f);
	}
	int front()
	{
		if(empty()) cout<<"Error!Empty!"<<endl;
		return data[f];
	}
	int back()
	{
		if(empty()) cout<<"Error!Empty!"<<endl;
		return data[pre(r)];
	}
	bool push_front()
	{
		if(next(r)==pre(f))
		{
			cout<<"Error!Crash!"<<endl;
			return false;
		}
		f=pre(f);
		data[f]=x;
		return true;
	}
	void pop_back()
	{
		if(empty())
			cout<<"Error!Empty!"<<endl;
		else r=pre(r);
	}
};


相關推薦

queueDequeue STL依賴些微工作 佇列佇列

之前一直依賴STL,在無數次TLE的漩渦中。。本萌新終於下定決心手寫了queue和dequeue 首先是Queue,實現的功能有: 1.push,pop,front,empty 這四個基本操作 2.附帶兩個函式next和pre,用於在陣列模擬佇列的時候方便獲取下一個位置,

JAVA集合 Deque 與 Queue 實現類 ArrayDeque(佇列佇列) 原始碼淺析

文章目錄 JAVA集合 Deque實現類 ArrayDeque(雙端佇列) 原始碼淺析 一、簡述: 二、ArrayDeque 類結構與屬性 三、ArrayDeque 構造方法 四、Queue 的方法 1.

朱曄你聊Spring系列S1E4:靈活但不的Spring MVC

iat ndt css host 4.0 ttr found zip壓縮 return 本文會以一些例子來展現Spring MVC的常見功能和一些擴展點,然後我們來討論一下Spring MVC好用不好用。 使用SpringBoot快速開始 基於之前的parent模塊,我

朱曄你聊Spring系列S1E3:靈活但不的Spring MVC

本文會以一些例子來展現Spring MVC的常見功能和一些擴充套件點,然後我們來討論一下Spring MVC好用不好用。 使用SpringBoot快速開始 基於之前的parent模組,我們來建立一個新的模組: <?xml version="1.0" encoding="UTF-8"?> <

多層感知器識別數字法程序

itl cti val shape erb ase 鏈接 n) frame 1 #coding=utf-8 2 #1.數據預處理 3 import numpy as np #導入模塊,numpy是擴展鏈接庫 4 import pan

python中文字串居中/中文居中python/python漢字字串居中:撕比方法

在做一個小的格式化輸出的時候出現了問題:無論怎麼排,漢字都無法很順利地被居中,尤其是漢字和英文或者數字在一起時,更是一團糟。 python有內建的字串方法str.center(x),可以讓字串以i的長度輸出並居中。 但是! 但是! 但是! 在計算字串長度時候預設是asci

QInputDialog的呵呵

QStringList items;items << QObject::tr("Spring") << QObject::tr("Summer") << QObject::tr("Fall") <<QObject::tr("W

SpringMVC架構,註解實現springmvc過程(動腦學院Jack老師課後自己練習的體會)

標籤: 1、第一步,首先搭建如下架構,其中,annotation中放置自己編寫的註解,主要包括service controller qualifier RequestMapping 第二步:完成對應的annotation: package com.cn.annotation; import java.

SpringMVC框架,註解實現springmvc過程

開發十年,就只剩下這套架構體系了! >>>   

Jerry喜歡有道雲筆記這款軟體自己的知識管理知識體系的構建。 ![](http://upl

Jerry喜歡用有道雲筆記這款軟體做自己的知識管理和知識體系的構建。 當您看到一篇好的有道雲筆記分享時,可能會想將其精美的圖片下載到本地。作為程式猿,我們不會去手動一張張下載。寫個程式幫我們自動下載吧。 比如這個筆記:http://note.youdao.com/noteshare?id=62840e

Leetcode|Sliding Window Maximum(multiset,優先佇列,佇列區間樹的應用)

Given an array nums, there is a sliding window of size k which is moving from the very left of the array to the very right. You can

NYOJ 1128 速(佇列

題目1128 手速 時間限制: 1000 ms  |  記憶體限制: 65535 KB 難度: 1 描述

少說話多程式碼之Python學習060——標準模組(佇列

雙端佇列可以從佇列的兩端加入和刪除元素。比如,在需要按照元素增加的順序來移除元素時非常有用。 看下面的使用, 先產生一個雙端佇列。 from collections import deque q = deque(range(5)); print(q) 輸出 deque([0, 1, 2,

【死磕演算法·棧佇列】滑動視窗問題-佇列

題目要求: 有一個整型陣列 arr 和一個大小為 w 的視窗,從陣列的最左邊滑到最右邊,視窗每次向右邊滑一個位置。 返回一個長度為n-w+1的陣列res,res[i]表示每一種視窗狀態下的最大值。 以陣列為[4,3,5,4,3,3,6,7],w=3為例。因為第一個視窗[4,3,5]的最大值為

佇列實現單調佇列

單調佇列是指:佇列中元素之間的關係具有單調性,而且,隊首和隊尾都可以進行出隊操作,只有隊尾可以進行入隊操作。 以單調不減佇列為例:佇列內的元素(e1,e2,e3...en)存在(e1<=e2<=e3<=...<=en)的關係,所以隊首元素e1一

java集合——佇列佇列+優先順序佇列

【0】README 【1】雙端佇列:可以讓人們有效地在頭部和尾部同時新增和刪除元素。 1.0) Deque API are as follows : java.util.Interfac

Java高階技術第四章——Java容器類Queue之體驗佇列ArrayQueue設計之妙

前言 ArrayDeque ArrayDeque的資料結構要比PriorityQueue要簡單得多,是通過陣列來實現的。但是,ArrayDeque的特點是一個雙端佇列,既可以實現FIFO的Queue,也可以實現LIFO的Stack. ArrayDequ

SVM(有核無核函式)進行MNIST字型的分類

1.普通SVM分類MNIST資料集 1 #匯入必備的包 2 import numpy as np 3 import struct 4 import matplotlib.pyplot as plt 5 import os 6 ##載入svm模型 7 from sklearn import

Effective_STL 學習筆記(四十三) 盡量法調代替循環

學習 code 復雜 public gin ron nsf 優勢 col 每一個算法接受至少一對用來指示將被操作對象區間的叠代器,比如,min_element 可以找出此區間中的最小的值,而 accumulate 則對區間內的元素作某種形式的整體求和運算,partiti

教你TensorFlow自編碼器模型生成數字(附程式碼)

來源:機器之心 本文長度為1876字,建議閱讀4分鐘 本文介紹瞭如何使用 TensorFlow 實現變分自編碼器(VAE)模型,並通過簡單的手寫數字生成案例一步步引導讀者實現這一強大的生成模