Skip to content

Commit b98a6cc

Browse files
author
tianqing.liang
committed
Dart 栈,队列,循环队列
1 parent 561f92b commit b98a6cc

File tree

8 files changed

+227
-3
lines changed

8 files changed

+227
-3
lines changed

03Insertion-Sort/InsertionSort.dart

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ void main() {
1111
var list2 = ["2","4","6","3","1","5"];
1212
var list3 = [2, 4, 6, 3, 1, 5];
1313
sort(list);
14-
insertionSort(list);
14+
insertionSort(list2);
1515
insertionSort2(list3);
16-
1716
}
1817

1918
//Dart语言原生方法
@@ -91,7 +90,6 @@ void swap(arr, int i, int j) {
9190
// * of the given list [:a:].
9291
// *
9392
// * If the given range is invalid an "OutOfRange" error is raised.
94-
// * TODO(floitsch): do we want an error?
9593
// *
9694
// * See [:sort:] for requirements of the [:compare:] function.
9795
// */

04Stack-Queue/ArrayQueue.dart

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import 'Queue.dart';
2+
class ArrayQueue implements Queue{
3+
4+
List? arr;
5+
ArrayQueue(){
6+
arr =<dynamic>[];
7+
}
8+
9+
@override
10+
dequeue() {
11+
arr!.removeAt(0);
12+
}
13+
14+
@override
15+
void enqueue(e) {
16+
arr!.add(e);
17+
}
18+
19+
@override
20+
getFront() {
21+
return arr![0];
22+
}
23+
24+
@override
25+
int getSize() {
26+
return arr!.length;
27+
}
28+
29+
@override
30+
bool isEmpty() {
31+
return arr!.isEmpty;
32+
}
33+
34+
@override
35+
String toString() {
36+
StringBuffer buffer = new StringBuffer();
37+
buffer.write("Queue: ");
38+
buffer.write('front [');
39+
for(int i = 0 ; i < arr!.length ; i ++){
40+
buffer.write(arr![i]);
41+
if(i != arr!.length - 1)
42+
buffer.write(", ");
43+
}
44+
buffer.write("] tail");
45+
return buffer.toString();
46+
}
47+
}

04Stack-Queue/ArrayStack.dart

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import 'Stack.dart';
2+
class ArrayStack<T> implements Stack<T>{
3+
4+
List? arr;
5+
ArrayStack(){
6+
arr =<dynamic>[];
7+
}
8+
9+
@override
10+
int getSize() {
11+
return arr!.length;
12+
}
13+
14+
@override
15+
bool isEmpty() {
16+
return arr!.isEmpty;
17+
}
18+
19+
@override
20+
T peek() {
21+
return arr![0];
22+
}
23+
24+
@override
25+
T pop() => arr!.removeLast();
26+
27+
@override
28+
void push(T e) {
29+
arr!.add(e);
30+
}
31+
32+
@override
33+
String toString() {
34+
StringBuffer buffer = new StringBuffer();
35+
buffer.write("Stack: ");
36+
buffer.write('[');
37+
for(int i = 0 ; i < arr!.length ; i ++){
38+
buffer.write(arr![i]);
39+
if(i != arr!.length - 1)
40+
buffer.write(", ");
41+
}
42+
buffer.write("] top");
43+
return buffer.toString();
44+
}
45+
46+
}

04Stack-Queue/LoopQueue.dart

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import 'Queue.dart';
2+
3+
class LoopQueue<T> implements Queue<T>{
4+
5+
List? arr;
6+
int front = 0,tail=0;
7+
int size =0;
8+
9+
LoopQueue(){
10+
arr = List.filled(10, false);
11+
}
12+
13+
int getCapacity(){
14+
int capacity = arr!.length;
15+
return capacity;
16+
}
17+
18+
@override
19+
dequeue() {
20+
T ret = arr![front];
21+
arr![front] = null;
22+
front = (front + 1) % arr!.length;
23+
size--;
24+
if(size == getCapacity() / 4 && getCapacity() / 2 != 0){
25+
resize((getCapacity()/2) as int);
26+
}
27+
return ret;
28+
}
29+
30+
void resize(int newCapacity){
31+
32+
List? newArr = List.filled(newCapacity, false);
33+
for(int i = 0 ; i < arr!.length ; i ++){
34+
newArr[i] = arr![(i + front) % arr!.length];
35+
}
36+
arr = newArr;
37+
front = 0;
38+
tail = size;
39+
}
40+
41+
@override
42+
void enqueue(e) {
43+
44+
if((tail + 1) % arr!.length == front)
45+
resize(getCapacity() * 2);
46+
arr![tail] = e;
47+
tail = (tail + 1) % arr!.length;
48+
size++;
49+
}
50+
51+
@override
52+
getFront() {
53+
if(isEmpty()){
54+
throw Exception("Queue is empty.");
55+
}
56+
return arr![front];
57+
}
58+
59+
@override
60+
int getSize() {
61+
return arr!.length;
62+
}
63+
64+
@override
65+
bool isEmpty() {
66+
return front == tail ;
67+
}
68+
69+
@override
70+
String toString() {
71+
StringBuffer buffer = new StringBuffer();
72+
buffer.write("Queue: size = $size , capacity = ${getCapacity()} \n");
73+
buffer.write('front [');
74+
for(int i = front ; i != tail ; i = (i + 1) % arr!.length){
75+
buffer.write(arr![i]);
76+
if((i + 1) % arr!.length != tail)
77+
buffer.write(", ");
78+
}
79+
buffer.write("] tail");
80+
return buffer.toString();
81+
}
82+
83+
}

04Stack-Queue/Main.dart

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import 'ArrayStack.dart';
2+
import 'ArrayQueue.dart';
3+
import 'LoopQueue.dart';
4+
5+
void main(){
6+
// ArrayStack<int> stack = new ArrayStack<int>();
7+
// for(int i = 0 ; i < 10 ; i ++){
8+
// stack.push(i);
9+
// print(stack.toString());
10+
// }
11+
// stack.pop();
12+
//
13+
ArrayQueue queue = new ArrayQueue();
14+
for(int i = 0 ; i < 20 ; i ++){
15+
queue.enqueue(i);
16+
print(queue);
17+
if(i % 3 == 2){
18+
print('----出栈头部元素-----');
19+
queue.dequeue();
20+
print(queue);
21+
}
22+
}
23+
24+
LoopQueue<int> loopQueue = new LoopQueue<int>();
25+
for(int i = 0 ; i < 30 ; i ++){
26+
loopQueue.enqueue(i);
27+
print(loopQueue);
28+
29+
if(i % 3 == 2){
30+
loopQueue.dequeue();
31+
print(loopQueue);
32+
}
33+
}
34+
}

04Stack-Queue/Queue.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
abstract class Queue<T>{
2+
int getSize();
3+
bool isEmpty();
4+
void enqueue(T e);
5+
T dequeue();
6+
T getFront();
7+
}

04Stack-Queue/Stack.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
abstract class Stack<T>{
2+
int getSize();
3+
bool isEmpty();
4+
void push(T e);
5+
T pop();
6+
T peek();
7+
}

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,6 @@
55
1. 线性搜索
66
2. 选择排序
77
3. 插入排序
8+
4. 栈,队列,循环队列
9+
810

0 commit comments

Comments
 (0)