演算法 佇列,棧

2021-10-01 09:24:42 字數 1745 閱讀 9755

佇列:

當我們在火車站排隊時,第乙個排隊的人會第乙個買到票,而後面來的只能排在最後,這種情況就是佇列。c語言中也有相應的情況,如:

現有一串加密的數字,你需要解密,規則如下:

首先將第乙個數字刪除,然後將第二個數字放在最後一位上,再將第三個數字刪除並把第四個數字放在最後一位上,以此類推,知道剩下最後乙個數字,將最後乙個數字也刪除。按照剛才刪除的順序,把這些數重新排序。

現在我們需要考慮如何刪去和移位,這個時候就要用到佇列。我們先定義乙個陣列來作為佇列的主體,再定義兩個變數:head來做隊首,tail來做隊尾。然後我們可以把這三個元素封裝成乙個結構體。佇列是一種特殊的線性結構,它只允許在佇列的首部(head)進行刪除操作,這稱為「出隊」,而在佇列尾部(tail)進行插入操作,這稱為「入隊」。

完整**如下:

#include

struct queue

;int

main()

while

(q.head //當佇列不為空的時候執行迴圈

return0;

}

棧:

例:判斷一行字串是否為回文(回文就是正讀反讀都相同,如:aha,ahaha,席主席)

首先我們需要讀取這行字串,並求出這個字串的長度。

char a[

101]

;int len;

gets

(a);

len=

strlen

(a);

如果乙個字串是回文的話,那麼它必須是中間對稱的,我們需要求重點,即:

mid=len/2-

1;

之後就要用到棧了。

我們先將mid之前的字元全部入棧。因為這裡的棧是用來儲存字元的,所以這裡用來實現棧的陣列型別是字元陣列即char s[101];,初始化棧很簡單,top=0;就可以了。如棧的操作是top++;s[top]=x;也可以簡寫為s[++top]=x;。

現在我們將mid之前的字元依次全部如棧。

for(i=

0;i<=mid;i++

)

接下來進入判斷回文的關鍵步驟。將當前棧中的字元依次出棧,看看是否能與mid之後的字元一一匹配,如果都能匹配則說明這個字串是回文字串,否則這個字串就不是回文字串。

for

(i=mid+

1;i<=len-

1;i++

) top--;}

if(top==0)

printf

("yes");

else

printf

("no"

);

最後如果top的值為0,就說明棧內所有的字串都被一一匹配了,那麼這個字串就是回文字串。完整**如下:

#include

#include

intmain()

//判斷字串的長度是奇數還是偶數,並找出需要進行字元匹配的其實下標

if(len%2==

0)else

if(len%2==

1)for(i=next;i<=len-

1;i++

) top--;}

if(top==0)

//如果top的值為0,就說明棧內所有的字串都被一一匹配了

else

return0;

}

棧和佇列演算法

1 實現乙個棧,要求實現push 出棧 pop 入棧 min 返回最小值 的時間 複雜度為o 1 方法1 使用乙個棧實現,交叉棧 pragma once include define max value 100 typedef struct minstackminstack 實現乙個棧,要求實現pu...

演算法 佇列和棧

雙端佇列的首部和尾部都可以亞壓入元素 public class statck stacktest array public static void stacktest int array else else data.push array i system.out.println 每一步棧的最小值 ...

演算法 棧和佇列

佇列public inte ce mystackextends iterable public class arraystackimplements mystack override public item pop throws exception item item a n check 避免物件游...