使用陣列模擬佇列 迴圈佇列和棧

2021-09-26 03:05:34 字數 1447 閱讀 4602

在一些考試題中以及筆試面試的過程中,在需要使用stack和queue的時候,可能被要求不能使用stl中相關的庫函式,也就意味著我們需要使用純c進行程式設計。但是如果在考試中或者筆試面試中,為了要使用棧和佇列,而去寫乙個完整的資料結構是比較大費周章,況且在時間上也不一定允許,因此,使用陣列來模擬棧和佇列的實現是一種明智的選擇,原因有兩個:

一、使用陣列模擬佇列和棧可以簡化程式設計的複雜度,節省時間,比如在dfs()和bfs()可以花更多的時間來思考這兩個邏輯的實現。

二、使用陣列模擬的棧和佇列在效率上比標準庫的容器類高很多,可以使得程式執行的速度更快。

1.陣列模擬棧的實現

陣列模擬棧的的實現,在棧頂指標的處理上,一般有兩種處理方式top=-1,和top=0,也就意味著在這兩種情況下對棧的操作是不相同的。

(1)top=-1

#include  #define max 100 //定義棧的大小

int s[max];

int top = -1;//初始的棧頂指標為-1

void push(int x)

void pop()

int top()

bool isempty()

bool isfull()

(1)top=0

#include  #define max 100 //定義棧的大小

int s[max];

int top = 0;//初始的棧頂指標為0

void push(int x)

void pop()

int top()

bool isempty()

bool isfull()

至於選擇哪種來使用,看大家的習慣。

2.陣列模擬棧的實現

#include #define n 100

int q[n];

int f=-1, r=-1;//初始定義隊頭和隊尾指標均為-1

void push(int x)

int front()

bool isempty()

bool isfull()

3.陣列模擬迴圈佇列的實現

迴圈佇列本質上是為了解決佇列假溢位的問題,假溢位可能會造成大量的儲存空間的浪費。迴圈佇列雖然能夠解決上述的問題,但是在判斷佇列空和佇列滿的兩種狀態上需要處理的比較好,非則也會出現不知佇列是空還是滿。目前比較常用的方式是:犧牲乙個位置儲存空間來判別佇列的兩種狀態。

#include #define n 6

int q[n];

int hh=0, tt=0

void push(int x)

int front()

bool isempty()

bool isfull()

int length()

佇列三 陣列模擬迴圈佇列

package com.hao.firstdemo.datastruct author haoxiansheng public class testcirclearry class circlearray 判斷佇列是否滿了 return public boolean isfull 判斷佇列是否為空 ...

陣列模擬迴圈佇列

前面我們用陣列模擬了佇列,大家有沒有想過乙個問題。不斷的入隊當rear maxsize 1時說明隊滿了沒問題啊,接著我們不斷出隊只留乙個元素在隊中,此時仍然rear maxsize 1,問題就暴露了出現一種假滿情況,目前的佇列是一次性使用顯然不符合現實情況。這裡我們就把它優化一下,迴圈佇列就誕生了,...

用棧模擬佇列和佇列模擬棧

棧 先進後出 filo 佇列 先進先出 fifo class myqueue 兩棧模擬佇列 def init self self.input self.output 進佇列 defpush self,x 出佇列 defpop self self.peek return self.output.pop...