Skip to content

Commit 0e7d93c

Browse files
committed
update
1 parent b337f72 commit 0e7d93c

File tree

2 files changed

+40
-61
lines changed

2 files changed

+40
-61
lines changed

rust/chapter_computational_complexity/space_complexity.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use std::collections::HashMap;
1010
use std::rc::Rc;
1111
use std::cell::RefCell;
1212
use list_node::ListNode;
13+
use tree_node::TreeNode;
1314

1415
/* 函数 */
1516
fn function() ->i32 {

zig/chapter_stack_and_queue/linkedlist_deque.zig

Lines changed: 39 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,15 @@ pub fn LinkedListDeque(comptime T: type) type {
6262
}
6363

6464
// 入队操作
65-
pub fn offer(self: *Self, num: T, isFront: bool) !void {
65+
pub fn push(self: *Self, num: T, is_front: bool) !void {
6666
var node = try self.mem_allocator.create(ListNode(T));
6767
node.init(num);
6868
// 若链表为空,则令 front, rear 都指向 node
6969
if (self.isEmpty()) {
7070
self.front = node;
7171
self.rear = node;
7272
// 队首入队操作
73-
} else if (isFront) {
73+
} else if (is_front) {
7474
// 将 node 添加至链表头部
7575
self.front.?.prev = node;
7676
node.next = self.front;
@@ -86,21 +86,21 @@ pub fn LinkedListDeque(comptime T: type) type {
8686
}
8787

8888
// 队首入队
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);
9191
}
9292

9393
// 队尾入队
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);
9696
}
9797

9898
// 出队操作
99-
pub fn poll(self: *Self, isFront: bool) T {
99+
pub fn poll(self: *Self, is_front: bool) T {
100100
if (self.isEmpty()) @panic("双向队列为空");
101101
var val: T = undefined;
102102
// 队首出队操作
103-
if (isFront) {
103+
if (is_front) {
104104
val = self.front.?.val; // 暂存头结点值
105105
// 删除头结点
106106
var fNext = self.front.?.next;
@@ -146,7 +146,7 @@ pub fn LinkedListDeque(comptime T: type) type {
146146
return self.rear.?.val;
147147
}
148148

149-
// 将链表转换为数组
149+
// 返回数组用于打印
150150
pub fn toArray(self: *Self) ![]T {
151151
var node = self.front;
152152
var res = try self.mem_allocator.alloc(T, self.size());
@@ -158,19 +158,6 @@ pub fn LinkedListDeque(comptime T: type) type {
158158
}
159159
return res;
160160
}
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-
}
174161
};
175162
}
176163

@@ -184,46 +171,37 @@ pub fn main() !void {
184171
var deque = LinkedListDeque(i32){};
185172
try deque.init(std.heap.page_allocator);
186173
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+
// 获取双向队列的长度
225203
var size = deque.size();
226-
std.debug.print("\n队列长度 size = {}", .{size});
204+
std.debug.print("\n双向队列长度 size = {}", .{size});
227205

228206
// 判断双向队列是否为空
229207
var is_empty = deque.isEmpty();

0 commit comments

Comments
 (0)