佇列的底層設計以及時間複雜度的優化

2021-08-19 20:56:06 字數 1603 閱讀 4755

1.基於陣列的實現

佇列的基本概念就是先進先出,但是如果採用陣列來實現就會出現每次執行一次dequeue會把陣列裡面的每個元素都會移動一次,移動n次的時間複雜度就是o(n^2),我們想要優化它的dequeue操作,可以定義兩個變數來記錄它的棧頂和棧尾來進行入隊和出隊操作

/**

* created by upupgogogo on 2018/4/26.下午6:02

*/public class loopqueueimplements queue

public loopqueue()

@override

public int getsize()

@override

public boolean isempty()

@override

public void enqueue(e e)

data[tail] = e;

tail = (tail + 1) % data.length; //這個是乙個循壞的佇列

size++;

}@override

public e dequeue()

@override

public e getfront()

public int getcapacity()

private void resize(int capacity)

@override

public string tostring()

return res.tostring();

}

2.基於鍊錶的實現

鍊錶本身會有乙個頭指標,它進行dequeue時時間複雜度是o(1),但是進行enqueue的操作卻是o(n)級別的,我們可以設定乙個tail變數來記錄尾結點,這樣enqueue操作也是o(1)級別的

/**

* created by upupgogogo on 2018/5/9.下午7:43

*/public class linkedlistqueue

public node(e e)

public node()

@override

public string tostring()

}private node head,tail;

private int size;

public linkedlistqueue()

public int getsize()

boolean isempty()

public void enqueue(e e)

else

size ++;

}public e dequeue()

node resnode = head;

head = head.next;

resnode.next = null;

size --;

return resnode.e;

}public e getfront()

return head.e;

}public string tostring()

return res.tostring();

}}

各種排序演算法比較以及時間複雜度

1.氣泡排序 n n。倆個for迴圈決定其時間複雜度為n 2 template class t void swap t a,inti,intj 冒泡法bubble sort template class t void bubsort t a,intn 2.選擇排序 n n。同樣,倆個for迴圈決定其...

氣泡排序的優化及時間複雜度分析

include include include using namespace std void bubblesort1 vectora for auto c a if 0 氣泡排序屬於交換排序類 改進後,遍歷第n遍時如果資料沒發生改變,則直接省略之後 多餘的比較過程 時間複雜度分析 最好情況 也就...

演算法的複雜度 時間複雜度與空間複雜度

通常,對於乙個給定的演算法,我們要做 兩項分析。第一是從數學上證明演算法的正確性,這一步主要用到形式化證明的方法及相關推理模式,如迴圈不變式 數學歸納法等。而在證明演算法是正確的基礎上,第二步就是分析演算法的時間複雜度。演算法的時間複雜度反映了程式執行時間隨輸入規模增長而增長的量級,在很大程度上能很...