部落格作業03 棧和佇列

2022-04-29 23:51:10 字數 3266 閱讀 7698

1.1緒論:程式=資料結構+演算法 資料組織方式:1資料的邏輯結構和資料的儲存結構,邏輯結構:集合,線性結構,樹形結構,圖形結構,儲存方式:順序儲存方式,鏈式儲存方式,索引儲存方式,雜湊儲存方式(空間複雜度,時間複雜度)。

(邏輯結構)線性結構:鏈式儲存方式+順序儲存方式。

順序儲存方式:操作:creatlist 產生順序表(缺點:無法動態分配空間一開始就給了乙個固定值可能造成空間的不足或者浪費)initlist(初始化順序表時間複雜度o(n)),destorylist(銷毀鍊錶,時間複雜度o(1),insertlist(插入順序表時間複雜度o(n)),deletelist(時間複雜度(o(n))

鏈式儲存方式(單鏈表,雙鏈表,迴圈鍊錶,有序表):creatlist 產生順序表(優點:動態分配避免空間浪費),destorylist(銷毀鍊錶,時間複雜度o(n)),insertlist(插入順序表時間複雜度o(1)),deletelist(時間複雜度(o(1))找到某個元素:searchlist(時間複雜度s1)

有序表(按順序排列的線性結構):優點在歸併等等操作的時候十分便利。

以下是兩種特殊的線性結構:

隊(先進先出) 邏輯結構:線性結構 儲存結構:順序表儲存,鍊錶儲存 操作:入隊:push,出隊:pop,產生佇列creatqueue,銷毀佇列:destoryqueue,取隊頭元素:getsqueue

棧 (後進先出)邏輯結構:線性結構 儲存結構:順序表儲存,鍊錶儲存 操作:入棧:push,出棧:pop,產生佇列creatstach,銷毀佇列:destorystack,取棧頂元素元素:getstack

多用順序儲存的方式,但是這樣的出隊(或者棧)並沒有真的消失。在計算多項式的字尾表示式,迷宮問題,銀行排隊問題等問題有大量的應用,在系統,函式呼叫,遞迴中也有大量的應用。

for(1號軌道不空)

else if

else

}for(3號軌道不空)

if(1,3軌道是空)

空了輸出結果

else

就輸出那句話

就是3與2是否匹配的時候沒有迴圈判斷造成錯誤

for(當櫃檯不全空閒或者隊伍不全空的時候) 

else 讓時間繼續增加,繼續在隊頭待者}

讓櫃檯中正在處理人處理時間減1;

if(有櫃檯的處理時間變成0)釋放櫃檯

else continute;

}輸出要求輸出的東西

沒問題

if(vip櫃檯是空閒的)

那麼就判斷現在在隊伍中已經來了的人之中去查詢有沒有vip,有的話讓他先出來(用移動陣列的方式),並且讓這個櫃檯保留這個人的資訊,

然後可以重複7-3的步驟

不同的是不能保留這個人在佇列裡面的編號(由於vip出隊是真正意義上的出隊)所以就只需要保留這個人的處理時間

輸入n個矩陣的維度和一些矩陣鏈乘的表示式,輸出乘法的次數。如果乘法無法進行,輸出error。假定a是mn矩陣,b是np矩陣,則乘法的次數為mnp。如果矩陣a的列數不等於矩陣b的行數,則這兩個矩陣無法進行乘法運算。例如:a是5010的,b是1020的,c是205的,則 a(bc)的乘法次數為10205(bc的乘法次數)+5010*5(a(bc)的乘法次數)=3500.

第一行包括乙個正整數n,表示共有n個矩陣參與運算。

接下來的n行,每行包括三部分,第一部分是矩陣的名字(乙個大寫字母),第二部分和第三部分各是乙個正整數,分別表示該矩陣的行數和列數,這三部分之間有乙個空格分隔。

最後一行包括乙個矩陣運算的合法字串(只包括小括號和上述矩陣的名稱)

樣例輸入:

9a 50 10

b 10 20

c 20 5

d 30 35

e 35 15

f 15 5

g 5 10

h 10 20

i 20 25ab

c(aa)

(ab)

(ac)

(a(bc))

((ab)c)

(((((de)f)g)h)i)

(d(e(f(g(hi)))))

((d(ef))((gh)i))

樣例輸出:00

0error

10000

error

3500

15000

40500

47500

15125

給出一系列的矩陣,給他們取名a ,b…… 以及它們的行數和列數。給完後,給出一系列的表示式,然後要求求出按這些表示式進行計算,會有多少次乘法步驟。

這題和括號匹配那題很像。關鍵的步驟是計算矩陣乘法次數的這個過程。

//解析表示式

#include#include#include#includeusing namespace std;

struct matrix

}m[26];

stacks;

int main()

string expr;//定義運算串

while(cin>>expr)

{int len=expr.length();//定義len為運算串長度

bool error=false;

int ans=0;

for(int i=0;i本題巧妙的運用了棧先進後出的特點輕鬆的解決了這個看似很難的問題,熟練的運用了c++中的stl類,令人讚嘆。

部落格作業03 棧和佇列

定義乙個棧s用來存放str字串的值 str的值依次如s棧中 str的值與s值依次比較 如果有乙個不等,return 0 反之都相等 return 1 建立佇列q1 將1至n的數字依次入佇列 如果m大於n return error 否則while i 沒有考慮到結尾不能有多餘空格 將認識排號為奇數存入...

部落格作業03 棧和佇列

邏輯結構包括 集合,線性結構,樹形結構,圖形結構 線性結構包括 線性表,鍊錶,棧,佇列,串 樹形結構包括 二叉樹等 棧是一種後進先出表,有順序儲存結構和鏈式儲存結構,基本操作包括 初始化 銷毀 進棧 出棧 判斷棧空 去棧頂。主要應用有 字首表示式轉字尾表示式以及字尾表示式的計算 迷宮問題 佇列是一種...

部落格作業03 棧和佇列

定義棧指標s,定義n儲存返回值 輸入乙個字串str 動態申請空間 呼叫函式symmetry n 0,輸出no n 1 輸出yes 定義n,m 定義佇列指標q 定義e儲存出隊元素,flag判斷輸出格式,num 0判斷何時輸出 輸入n,m 如果m n 輸出error 申請空間 for i 1 to n ...