chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)結(jié)構(gòu)中堆棧出棧序列問題解析

454398 ? 來源:碼迷 ? 作者:碼迷 ? 2020-10-19 15:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

這是工作中遇到的小問題。

數(shù)據(jù)結(jié)構(gòu)中有一種數(shù)據(jù)類型——堆棧,該結(jié)構(gòu)中的數(shù)據(jù)項有如下特點:

除了最前面和最后面的數(shù)據(jù),每個數(shù)據(jù)項都有一個前驅(qū)結(jié)點和一個后繼結(jié)點;

堆棧兩端分別稱為棧頂和棧底,數(shù)據(jù)項只能在棧頂加入或者彈出。

很明顯,堆棧的數(shù)據(jù)遵循先入后出原則。假設(shè)我們有 3 個不同的數(shù)據(jù)項,編號 1,2,3,只要保證入棧順序是大編號在后小編號在前,且每次進棧的數(shù)量不限,則所有可能的出棧順序有:1-》2-》3,1-》3-》2,2-》1-》3,2-》3-》1,3-》2-》1 一共 5 種,注意 3-》1-》2 不是可能的出棧順序,因為如果 3 最先出棧,那么 1 和 2 必在棧中(如果還未入棧,則說明 3 先入棧,與假設(shè)矛盾),只能 2 在上 1 在下,所以出棧順序必然是 2-》1。那么,

問題一:編號\(1\sim n\)的連續(xù)數(shù)據(jù)項以編號的先后順序入棧然后出棧,所有可能的出棧順序有多少種?

上面的問題比較難于回答,引申之后得到另一個比較弱的問題

問題二:給定一個長度為\(n\) 的整數(shù)序列,且各個元素均不相同,它是否是一個出棧序列?

為了回答以上的兩個問題,我們首先來看下一個正常的出棧序列有什么特點。假設(shè)長度為 \(n\)的出棧序列是\(a_1,a_2,…,a_n\),取其中第\(k\) 個數(shù) \(a_k\),則有如下結(jié)論:

\(a_k\)之前的所有數(shù)據(jù)項都已經(jīng)出棧,即\(a_1,a_2,…,a_{k-1}\)都已經(jīng)出棧;

\(a_k\) 之后的所有數(shù)據(jù)項中,小于 \(a_k\)的都在棧內(nèi),大于\(a_k\)的尚未入棧;

\(a_k\)之后緊跟的出棧數(shù)據(jù)項 \(a_{k+1}\) 要么大于\(a_k\),要么是所有未出棧的比\(a_k\)小的數(shù)據(jù)項中最大的一個

結(jié)論 1 很明顯,因為本身就是出棧序列,因此之前的數(shù)據(jù)肯定已經(jīng)出棧;結(jié)論 2 中,之后的數(shù)據(jù)只有兩種存在的可能:在棧內(nèi),或者未進棧。比\(a_k\)小的如果未進棧,那么 akak 根本不可能出棧(因為就沒進棧),比\(a_k\)大的如果在棧內(nèi),那\(a_k\)也無法出棧,因為\(a_k\)在它的下面,因此得證;結(jié)論 3,\(a_{k+1}\)就是\(a_k\) 出棧后棧頂?shù)臄?shù)據(jù),因此必然是在棧內(nèi)的數(shù)據(jù)的最上面的一個,或者是棧外的某一個數(shù)據(jù)(進棧再出棧)。

于是由結(jié)論 3 找到判斷序列的方法:逐個檢查序列的每一項\(a_k\),將該項之后的數(shù)據(jù)分為大于該數(shù)據(jù)的大數(shù)集合\(S_g\)和小于該數(shù)的小數(shù)集合\(S_l\),查看是否后續(xù)的數(shù)據(jù)項是小數(shù)集合的最大值或者是大數(shù)集合的任意值,如果不是則不是出棧序列,即若 \(a_{k+1}\in S_g\) 或 \(a_{k+1}=max_l{S_l}\),即是出棧序列。

問題一的解答,就是窮舉長度為 nn 的序列,逐個進行判斷,得到最后的結(jié)果,附上 python 程序。

import math

import itertools

% 輸入序列的長度

n = raw_input(“Input n: ”)

% 判斷是否是出棧序列

def IsNotStackSeq(n_ls, n):

for k in range(0,n-2):

% 逐個檢查序列中的每一個元素

ak = n_ls[k]

set_in = n_ls[k+1:]

a_max = ak

% 將ak之后的元素分為大于和小于兩組集合

min_list = [item for item in set_in if item 》 ak]

max_list = [item for item in set_in if item 《 ak]

if len(max_list) 》 0:

a_max = max(max_list)

% 后續(xù)的元素是否是小于集合的最大值或者屬于大于集合

if n_ls[k+1] != a_max and (n_ls[k+1] not in min_list):

return 1

return -1

def StackSeqList(n):

n_permation = list(itertools.permutations(range(1,int(n)+1), int(n)))

n_list = [item for item in n_permation if IsNotStackSeq(list(item),int(n)) 《 0]

return (len(n_list),n_list)
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 堆棧
    +關(guān)注

    關(guān)注

    0

    文章

    183

    瀏覽量

    20125
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40741
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4827

    瀏覽量

    86701
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    c++之和隊列

    stack ,(堆棧),是一種先進后(First In Last Out,FILO)的數(shù)據(jù)結(jié)構(gòu),先插入的數(shù)據(jù)
    的頭像 發(fā)表于 07-15 08:50 ?1717次閱讀
    c++之<b class='flag-5'>棧</b>和隊列

    數(shù)據(jù)結(jié)構(gòu)的幾個重要知識點

    希望所招入的技術(shù)人員能夠面向數(shù)據(jù)和邏輯,這對于整個軟件架構(gòu)來說很重要,而不僅僅是把一段代碼寫好。數(shù)據(jù)結(jié)構(gòu)是指相互之間存在著一種或多種關(guān)系的數(shù)據(jù)元素的集合和該集合
    發(fā)表于 02-27 15:01

    UCOSIII任務(wù)堆棧和STM32堆棧增長方向是否一致?

    1.原子哥說:堆棧是在RAM按照“先進先出(FIFO)”的原則組織的一塊連續(xù)的存儲空間個人理解堆棧難道不是的一種,既然如此,的順序應(yīng)該
    發(fā)表于 04-23 03:51

    常見的數(shù)據(jù)結(jié)構(gòu)

    的,那樣對于數(shù)據(jù)的使用簡直是個悲劇。針對此類數(shù)據(jù),數(shù)據(jù)結(jié)構(gòu)提供了圖存儲結(jié)構(gòu),專門用于存儲這類數(shù)據(jù)。二、數(shù)
    發(fā)表于 05-10 07:58

    數(shù)據(jù)結(jié)構(gòu)之鏈式介紹

    數(shù)據(jù)結(jié)構(gòu)之鏈式鏈式鏈式的定義鏈式操作的實現(xiàn)鏈式初始化鏈式
    發(fā)表于 12-17 08:11

    STM32堆棧區(qū)劃分

    STM32堆棧區(qū)(一)一個由C/C++編譯的程序占用的內(nèi)存分為以下幾個部分:區(qū)(stack):編譯器自動分配釋放,存放函數(shù)的參數(shù)值,局部變量的值等。操作方式類似于數(shù)據(jù)結(jié)構(gòu)
    發(fā)表于 01-20 08:32

    計算機堆棧有哪些功能

    在計算機領(lǐng)域,堆棧是一個不容忽視的概念,堆棧是兩種數(shù)據(jù)結(jié)構(gòu)。堆棧都是一種數(shù)據(jù)項按序排列的數(shù)據(jù)結(jié)構(gòu)
    發(fā)表于 01-20 06:16

    java數(shù)據(jù)結(jié)構(gòu)學習

    數(shù)據(jù)結(jié)構(gòu)是對計算機內(nèi)存數(shù)據(jù)的一種安排,數(shù)據(jù)結(jié)構(gòu)包括 數(shù)組, 鏈表, , 二叉樹, 哈希表等,算法則對對這些
    發(fā)表于 11-29 09:46 ?879次閱讀

    堆和有什么區(qū)別堆棧的詳細資料說明

    在計算機領(lǐng)域,堆棧是一個不容忽視的概念,但是很多人甚至是計算機專業(yè)的人也沒有明確堆棧其實是兩種數(shù)據(jù)結(jié)構(gòu)。雖然堆棧,堆棧的說法是連起來叫,但是
    發(fā)表于 08-22 17:30 ?0次下載
    堆和<b class='flag-5'>棧</b>有什么區(qū)別<b class='flag-5'>堆棧</b>的詳細資料說明

    JAVA的堆和介紹和內(nèi)存機制堆和的區(qū)別及變量在內(nèi)存的分配

    堆棧是 兩種數(shù)據(jù)結(jié)構(gòu)堆棧都是一種數(shù)據(jù)項按序排列的數(shù)據(jù)結(jié)構(gòu),只能在一端(稱為頂(top))對
    發(fā)表于 05-09 18:15 ?2次下載
    JAVA的堆和<b class='flag-5'>棧</b>介紹和內(nèi)存機制<b class='flag-5'>中</b>堆和<b class='flag-5'>棧</b>的區(qū)別及變量在內(nèi)存<b class='flag-5'>中</b>的分配

    什么是?數(shù)據(jù)結(jié)構(gòu)如何實現(xiàn)

    今天放松一下,我們來看看數(shù)據(jù)結(jié)構(gòu),這節(jié)的知識點可以說是數(shù)據(jù)結(jié)構(gòu)中最容易上手的知識點了,其實比起鏈表,其實鏈表也有和隊列的模型,鏈表的
    發(fā)表于 04-29 18:25 ?0次下載
    什么是<b class='flag-5'>棧</b>?<b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b><b class='flag-5'>中</b><b class='flag-5'>棧</b>如何實現(xiàn)

    如何解決數(shù)據(jù)結(jié)構(gòu)設(shè)計最大頻率問題?

    讀完本文,可以去力扣解決如下題目: 895.最大頻率(Hard) ? 我個人很喜歡設(shè)計特殊數(shù)據(jù)結(jié)構(gòu)的問題,畢竟在工作中會經(jīng)常用到基本數(shù)據(jù)結(jié)構(gòu),而設(shè)計類的問題就非常考驗對基本數(shù)據(jù)結(jié)構(gòu)
    的頭像 發(fā)表于 03-02 11:02 ?1618次閱讀

    PLC編程實現(xiàn)堆棧功能

    排列的數(shù)據(jù)結(jié)構(gòu)。具有滿、空的屬性, 可以對數(shù)據(jù)結(jié)構(gòu)進行和入
    發(fā)表于 04-17 11:49 ?3次下載
    PLC編程實現(xiàn)<b class='flag-5'>堆棧</b>功能

    PLC實現(xiàn)入功能

    使用西門子PLC實現(xiàn)入的功能,出入順序為先入先出 準備工作 1. 創(chuàng)建FC塊。入
    發(fā)表于 04-18 10:25 ?1次下載
    PLC實現(xiàn)入<b class='flag-5'>棧</b><b class='flag-5'>出</b><b class='flag-5'>棧</b>功能

    數(shù)據(jù)結(jié)構(gòu)解決滑動窗口問題

    前文用 [單調(diào)解決三道算法問題]介紹了單調(diào)這種特殊數(shù)據(jù)結(jié)構(gòu),本文寫一個類似的數(shù)據(jù)結(jié)構(gòu)「單調(diào)隊列」。 也許這種數(shù)據(jù)結(jié)構(gòu)的名字你沒聽過,其
    的頭像 發(fā)表于 04-19 10:50 ?943次閱讀
    <b class='flag-5'>數(shù)據(jù)結(jié)構(gòu)</b>解決滑動窗口問題