@@ -62,15 +62,15 @@ pub fn LinkedListDeque(comptime T: type) type {
62
62
}
63
63
64
64
// 入队操作
65
- pub fn offer (self : * Self , num : T , isFront : bool ) ! void {
65
+ pub fn push (self : * Self , num : T , is_front : bool ) ! void {
66
66
var node = try self .mem_allocator .create (ListNode (T ));
67
67
node .init (num );
68
68
// 若链表为空,则令 front, rear 都指向 node
69
69
if (self .isEmpty ()) {
70
70
self .front = node ;
71
71
self .rear = node ;
72
72
// 队首入队操作
73
- } else if (isFront ) {
73
+ } else if (is_front ) {
74
74
// 将 node 添加至链表头部
75
75
self .front .? .prev = node ;
76
76
node .next = self .front ;
@@ -86,21 +86,21 @@ pub fn LinkedListDeque(comptime T: type) type {
86
86
}
87
87
88
88
// 队首入队
89
- pub fn offerFirst (self : * Self , num : T ) ! void {
90
- try self .offer (num , true );
89
+ pub fn pushFirst (self : * Self , num : T ) ! void {
90
+ try self .push (num , true );
91
91
}
92
92
93
93
// 队尾入队
94
- pub fn offerLast (self : * Self , num : T ) ! void {
95
- try self .offer (num , false );
94
+ pub fn pushLast (self : * Self , num : T ) ! void {
95
+ try self .push (num , false );
96
96
}
97
97
98
98
// 出队操作
99
- pub fn poll (self : * Self , isFront : bool ) T {
99
+ pub fn poll (self : * Self , is_front : bool ) T {
100
100
if (self .isEmpty ()) @panic ("双向队列为空" );
101
101
var val : T = undefined ;
102
102
// 队首出队操作
103
- if (isFront ) {
103
+ if (is_front ) {
104
104
val = self .front .? .val ; // 暂存头结点值
105
105
// 删除头结点
106
106
var fNext = self .front .? .next ;
@@ -146,7 +146,7 @@ pub fn LinkedListDeque(comptime T: type) type {
146
146
return self .rear .? .val ;
147
147
}
148
148
149
- // 将链表转换为数组
149
+ // 返回数组用于打印
150
150
pub fn toArray (self : * Self ) ! []T {
151
151
var node = self .front ;
152
152
var res = try self .mem_allocator .alloc (T , self .size ());
@@ -158,19 +158,6 @@ pub fn LinkedListDeque(comptime T: type) type {
158
158
}
159
159
return res ;
160
160
}
161
-
162
- // 打印双向队列
163
- pub fn print (self : * Self ) ! void {
164
- var nums = try self .toArray ();
165
- std .debug .print ("[" , .{});
166
- if (nums .len > 0 ) {
167
- for (nums ) | num , j | {
168
- std .debug .print ("{}{s}" , .{num , if (j == nums .len - 1 ) "]" else " <-> " });
169
- }
170
- } else {
171
- std .debug .print ("]" , .{});
172
- }
173
- }
174
161
};
175
162
}
176
163
@@ -184,46 +171,37 @@ pub fn main() !void {
184
171
var deque = LinkedListDeque (i32 ){};
185
172
try deque .init (std .heap .page_allocator );
186
173
defer deque .deinit ();
187
- std .debug .print ("初始化空队列\n " , .{});
188
- try deque .print ();
189
-
190
- var nums = [_ ]i32 { 1 , 2 , 3 }; // 测试数据
191
-
192
- // 队尾入队
193
- for (nums ) | num | {
194
- try deque .offerLast (num );
195
- std .debug .print ("\n 元素 {} 队尾入队后,队列为\n " , .{num });
196
- try deque .print ();
197
- }
198
- // 获取队尾元素
199
- var last = deque .peekLast ();
200
- std .debug .print ("\n 队尾元素为 {}" , .{last });
201
- // 队尾出队
202
- while (! deque .isEmpty ()) {
203
- last = deque .pollLast ();
204
- std .debug .print ("\n 队尾出队元素为 {} ,队列为\n " , .{last });
205
- try deque .print ();
206
- }
207
-
208
- // 队首入队
209
- for (nums ) | num | {
210
- try deque .offerFirst (num );
211
- std .debug .print ("\n 元素 {} 队首入队后,队列为\n " , .{num });
212
- try deque .print ();
213
- }
214
- // 获取队首元素
215
- var first = deque .peekFirst ();
216
- std .debug .print ("\n 队首元素为 {}" , .{first });
217
- // 队首出队
218
- while (! deque .isEmpty ()) {
219
- first = deque .pollFirst ();
220
- std .debug .print ("\n 队首出队元素为 {} ,队列为\n " , .{first });
221
- try deque .print ();
222
- }
223
-
224
- // 获取队列的长度
174
+ try deque .pushLast (3 );
175
+ try deque .pushLast (2 );
176
+ try deque .pushLast (5 );
177
+ std .debug .print ("双向队列 deque = " , .{});
178
+ inc .PrintUtil .printArray (i32 , try deque .toArray ());
179
+
180
+ // 访问元素
181
+ var peek_first = deque .peekFirst ();
182
+ std .debug .print ("\n 队首元素 peek_first = {}" , .{peek_first });
183
+ var peek_last = deque .peekLast ();
184
+ std .debug .print ("\n 队尾元素 peek_last = {}" , .{peek_last });
185
+
186
+ // 元素入队
187
+ try deque .pushLast (4 );
188
+ std .debug .print ("\n 元素 4 队尾入队后 deque = " , .{});
189
+ inc .PrintUtil .printArray (i32 , try deque .toArray ());
190
+ try deque .pushFirst (1 );
191
+ std .debug .print ("\n 元素 1 队首入队后 deque = " , .{});
192
+ inc .PrintUtil .printArray (i32 , try deque .toArray ());
193
+
194
+ // 元素出队
195
+ var poll_last = deque .pollLast ();
196
+ std .debug .print ("\n 队尾出队元素 = {},队尾出队后 deque = " , .{poll_last });
197
+ inc .PrintUtil .printArray (i32 , try deque .toArray ());
198
+ var poll_first = deque .pollFirst ();
199
+ std .debug .print ("\n 队首出队元素 = {},队首出队后 deque = " , .{poll_first });
200
+ inc .PrintUtil .printArray (i32 , try deque .toArray ());
201
+
202
+ // 获取双向队列的长度
225
203
var size = deque .size ();
226
- std .debug .print ("\n 队列长度 size = {}" , .{size });
204
+ std .debug .print ("\n 双向队列长度 size = {}" , .{size });
227
205
228
206
// 判断双向队列是否为空
229
207
var is_empty = deque .isEmpty ();
0 commit comments