Ngân hàng câu hỏi có đáp án ôn tập môn Toán rời rạc | trường Đại học Huế

1 giải thuật đệ quy:BT01. Tháp Hà Nội:BT02. Ước số chung lớn nhất.BT03. Tính giai thừa của 1 số.BT04. Bài toán mã đi tuần.Hướng dẫn giải bài toán mã đi tuần.Xây dựng bước đi cho quân mã.Kiểm tra tính hợp lệ của bước đi.2 Danh sách liên kết.BT06. Cài đặt danh sách liên kết đơn.BT07. Cài đặt danh sách liên kết kép.BT08. Cài đặt ngăn xếp – stack.Các khái niệm cơ bản về cây nhị phân.BT10. Cài đặt cây - duyệt cây theo thứ tự trước. Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

Môn:
Trường:

Đại học Huế 272 tài liệu

Thông tin:
41 trang 2 tháng trước

Bình luận

Vui lòng đăng nhập hoặc đăng ký để gửi bình luận.

Ngân hàng câu hỏi có đáp án ôn tập môn Toán rời rạc | trường Đại học Huế

1 giải thuật đệ quy:BT01. Tháp Hà Nội:BT02. Ước số chung lớn nhất.BT03. Tính giai thừa của 1 số.BT04. Bài toán mã đi tuần.Hướng dẫn giải bài toán mã đi tuần.Xây dựng bước đi cho quân mã.Kiểm tra tính hợp lệ của bước đi.2 Danh sách liên kết.BT06. Cài đặt danh sách liên kết đơn.BT07. Cài đặt danh sách liên kết kép.BT08. Cài đặt ngăn xếp – stack.Các khái niệm cơ bản về cây nhị phân.BT10. Cài đặt cây - duyệt cây theo thứ tự trước. Tài liệu giúp bạn tham khảo, ôn tập và đạt kết quả cao. Mời bạn đọc đón xem!

49 25 lượt tải Tải xuống
lO MoARcPSD| 47110589
ĐẠI HỌC HU
KHOA K THUT VÀ CÔNG NGH
BÁO O
ĐỒ ÁN CTDL & GT
M HỌC 2020-2021
Ging viên hướng dn: Hồ Quc ng
Lớp: KHDL & TTNT
(
)
Do hội đng chấm thi ghi
Thừa Thn Huế, ngày …tháng…năm.....
lO MoARcPSD| 47110589
ĐẠI HC HU
KHOA K THUT VÀ CÔNG NGH
(
MU A PH
)
BÁO O
ĐỒ ÁN CTDL & GT
M HỌC 2020-2021
Ging viên hướng dn: Hồ Quc ng
Lớp: KHDL & TTNT
Sinh viên thực hin: Nguyn Phước
(
ký tên và ghi rõ họ tên
)
(
)
Do hi đng chm thi ghi
Thừa Thiên Huế, ngày …tháng…năm.....
lO MoARcPSD| 47110589
Mc Lục
KHOA K THUẬT VÀ CÔNG NGH..........................................................................................1
KHOA K THUẬT VÀ CÔNG NGH..........................................................................................2
1 giải thuật đệ quy:..........................................................................................................................5
BT01. Tháp Hà Nội:....................................................................................................................5
BT02. Ưc schung ln nht......................................................................................................6
BT03. Tính giai tha ca 1 số......................................................................................................7
BT04. Bài toán mã đi tuần...........................................................................................................8
Hưng dẫn giải bài toán mã đi tuần.........................................................................................8
y dựng c đi cho quân mã.........................................................................................8
Kim tra nh hp l ca c đi........................................................................................8
BT05. Bài toán 8 quân hậu........................................................................................................15
Gii bài toán xếp hu bằng đệ quy..................................................................................15
2 Danh sách liên kết.......................................................................................................................20
BT06. Cài đặt danh sách liên kết đơn........................................................................................21
BT07. Cài đặt danh sách liên kết kép........................................................................................21
BT08. Cài đặt ngăn xếp stack.................................................................................................22
BT09. Cài đặt hàng đợi queue................................................................................................23
3 Cây..............................................................................................................................................25
Các khái niệm cơ bản v cây nh phân...............................................................................25
BT10. Cài đặt cây - duyệt y theo th t
trưc........................................................................26
BT11. Cài đặt cây - duyệt cây theo th tự sau...........................................................................27
4. ĐTh........................................................................................................................................29
Cu trúc d liệu đ th (Graph).............................................................................................29
BT12. Cài đặt đồ th vô hướng..................................................................................................30
.......................................................................................................................................................30
BT13. Cài đặt đồ th có hướng...................................................................................................33
5. Sắp xếp và m kiếm..................................................................................................................35
BT14. Cài đặt thuật toán sắp xếp chọn.....................................................................................35
BT15. Cài đặt thuật toán sắp xếp chèn.....................................................................................36
BT16. Cài đặt thuật toán sắp xếp nổi bọt..................................................................................38
BT17. Cài đặt thuật toán sắp xếp nhanh - quick sort................................................................38
BT18. Cài đặt thuật toán heap sort...........................................................................................40
BT19. Cài đặt thuật toán sắp xếp trộn - merge sort..................................................................45
Đường dẫn link mã ngun:
https://github.com/NguyenPhuoc1207/Do_An_CTDL
1 gii thut đệ quy:
Một đối tưng đưc mô t tng qua chính nó đưc gi là mô t đệ quy.
Mt bài toán mang tính cht đ quy khi th đưc phân rã thành các bài toán nh hơn
nhưng mang cùng tính chất vi bài toán ban đu, c bài toán nh li đưc phân rã thành c
bài toán nh n na theo cùng tính cht đó.
Trong đời sống, cũng thưng xuyên thy mt s hiện tượng đệ quy, ví d như hai chiếc gương
đặt đi din nhau, ng xon c (trong ng xon c có ng xon c nh hơn).
lO MoARcPSD| 47110589
Đệ quy có ưu đim là thun li cho vic biu diễn bài toán, đng thi m gn chương trình. Tuy
nhiên cũng có nhược điểm, đó không tối ưu v mt thi gian (so vi s dng ng lp), gây
tn b nh có th tràn stack nếu không kim soát tt đ sâu ca đ quy.
BT01. Tháp Hà Ni:
ch gii bài toán tháp Ni bằng đệ quy
Qui ước: Đt tên 3 ct là A B C đ tin theo i. Yêu cu bài toán là chuyn n
chiếc đĩa t ct A sang ct C
Cách gii
Đu tiên ta ly ct C làm cc trung gian. Chuyn n-1 chiếc đĩa sang ct
B.
Ta chuyn chiếc đĩa ln nht sang ct C
Ly ct A làm ct trung gian chuyn n-1 chiếc đĩa từ ct B sang ct C
Code python:
lO MoARcPSD| 47110589
BT02. Ước s chung ln nht
Một phương pháp đơn giản đề m USCLN ca a và b là duyt t s nh hơn trong 2 số
a và b cho đến 1, khi gp s nào đó mà cả a và b đều chia hết cho nó thì đó chính là
USCLN ca a và b. Tuy vy phương pháp này chưa phi là hiu qu nht.
o thế k 3 TCN, nhà toán hc Euclid (phiên âm tiếng Vit là Ơ-clit) đã phát minh ra
mt gii thut m USCLN ca hai s nguyên ơng rt hiu qu đưc gi gii thut
Euclid. C th v ý tưng ca bài toán, gi s a ln hơn b, khi đó vic tính UCSLN ca
Code R:
lO MoARcPSD| 47110589
a và b s đưc đưa v bài toán tính USCLN ca a mod b và b vì USCLN(a, b) = USCLN(a
mod b, b).
Khi đã tìm đưc USCLN thì vic m BSCNN ca hai s nguyên ơng a và b khá đơn
giản. Khi đó BSCNN(a, b) = (a * b) / UCSLN(a, b).
Code python:
Code R:
BT03. Tính giai tha ca 1 s
Code python:
Code R:
lO MoARcPSD| 47110589
BT04. Bài toán đi tun
ng dn gii i toán đi tuần
Xây dựng bước đi cho quân
Gii x,y là độ dài bước đi trên các trục Oxy. Mt bưc đi hp l ca quân mã s
như sau: |x| + |y| = 3 ( Với x,y > 0).
Khi đó mt v trí bất quân mã 8 đưng th di chuyn. Chưa xét đến
c đi đó hợp l hay không.
Các bưc đi đó là: ( -2, -1), ( -2, 1), ( -1, -2), ( -1, 2), ( 1, -2), ( 1, 2), ( 2, -1),
( 2, 1)
Đ đơn gin ta s to hay mảng X[], Y[] để cha các giá tr trên. Vi mi X[i],
Y[i] s là mt cách di chuyn ca quân mã(0 ≤i 7 ).
Kim tra tính hp l ca bưc đi
Ta s dùng mt mng hai chiu A[n*n] để lưu v trí ca tng ô trong bàn c. Tt
c mảng đu khi to giá tr là 0( quân mã chưa đi qua).
Gii x,y là v trí hin ti ca quân mã, thì v trí tiếp theo mà quân mã đi s
dng x+X[i], y+Y[i]. Mt v trí được gi là hp l thì s tha mãn nh cht sau:
0 x+X[i] n-1.
0 x+X[i] n-1.
Nếu bước đi đó là bưc đi đúng thì ta s lưu thứ t ca bưc đi đó vào mảng A[
x+X[i], y+Y[i] ].
Code python:
lO MoARcPSD| 47110589
Code R:
library(purrr)
library(dplyr)
library(tidyverse)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Knight offsets i.e. the possible movements of a knight from the current
location
lO MoARcPSD| 47110589
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
knight_offsets <- matrix(c(
1, 2,
2, 1,
-2, 1,
-1, 2,
2, -1,
1, -2,
-1, -2,
-2, -1
), ncol = 2, byrow = TRUE)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#' Recurisvely calculate moves for a knight to complete a tour
#'
#' @param this_move proposed next move. 2 element numeric vector of (row,
col)
#' position at which to place the knight next
#' @param moves list of vectors. Each vector is length=2 and indicates the
#' row/column locations of the knight's tour so far
lO MoARcPSD| 47110589
#' @param visited 8x8 logical matrix which indicates whether or not a square
has been
#' visited by the knight already. When called by the user, this matrix
#' must only contain FALSE
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move_knight <- function(this_move, moves, visited) {
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Mark the move as visited
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
moves <- append(moves, list(this_move))
visited[this_move[1] + (this_move[2] - 1)*8] <- TRUE
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
# termination if all visited
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (all(visited)) {
return(moves)
}
lO MoARcPSD| 47110589
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Find all possible moves from this position
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
next_move <- cbind(knight_offsets[,1] + this_move[1], knight_offsets[,2] +
this_move[2])
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
# keep only moves that remain on the board
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
on_board <- next_move[,1] %in% 1:8 & next_move[,2] %in% 1:8
next_move <- next_move[on_board,,drop=FALSE]
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Keep only moves that target a location that has not yet been visited
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
not_yet_visited <- !visited[next_move] next_move <-
next_move[not_yet_visited,, drop = FALSE]
lO MoARcPSD| 47110589
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Recurse over every possible next move
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~
for (i in seq_len(nrow(next_move))) { res <-
move_knight(next_move[i,, drop = FALSE], moves, visited)
if (!is.null(res)) {
return(res)
}
}
NULL
}
system.time({ moves <- move_knight(c(4, 8), moves = list(), visited =
matrix(FALSE, 8, 8)) })
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#' Convert results to a data.frame for ggplot
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
lO MoARcPSD| 47110589
moves_df <- as.data.frame(do.call(rbind, moves))
moves_df <- set_names(moves_df, c('x', 'y'))
moves_df$idx <- 1:nrow(moves_df)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Plot the knight's tour
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ggplot(moves_df, aes(x, y)) +
geom_tile(aes(fill=as.logical((x+y)%%2)), colour = 'black') +
geom_path(alpha = 0.7, linetype = 1, size = 0.25) +
geom_text(aes(label = idx)) + scale_fill_manual(values = c('grey70',
'white')) + theme_void() + theme(legend.position = 'none') +
coord_equal() + labs( title = "A knight's tour in #RStats"
)
lO MoARcPSD| 47110589
BT05. Bài toán 8 quân hu
Gii bài toán xếp hu bằng đệ quy
Đ tin trình bày ta dùng biến i để đánh dấu các hàng t trên xung (
1 đến n). Dùng biến j để đánh dấu các ct t trái sang phải ( 1 đến n
);
Các phn t nm trên cùng hàng có ch s hàng bng nhau;
Các phn t nm trên cùng ct ch s ct bng nhau;
Đ tin cho vic in kết qu ra thì ta ch in ra ch s các ct tun t theo
các hàng t trên xung.
Điu kiện để đặt mt quân hậu đúng chỗ là không 2 trên cùng mt
ct ( ch s ct khác nhau). Không 2 quân hu nào cùng trên mt
đưng chéo.
Ý tưởng:
Đầu tiên ta đặt quân hu th nht vào các ct trên hàng 1 ( n cách
đt ).
Th đt quân hu 2 vào tng ct hàng 2 sao cho không b quân hu
1 khng chế. Vi mi v trí ca quân hu này ta li th đặt quân hu
th ba vào các ct sao cho không b các quân hậu trước khng chế.
Sau khi đặt xong quân hu th tám thì in ra mt cách đt.
Code python:
"""The n queens puzzle."""
class NQueens:
"""Generate all valid solutions for the n queens puzzle"""
def __init__(self, size):
lO MoARcPSD| 47110589
# Store the puzzle (problem) size and the number of valid solutions
self.size = size self.solutions = 0 self.solve()
def solve(self):
"""Solve the n queens puzzle and print the number of solutions"""
positions = [-1] * self.size self.put_queen(positions, 0)
print("Found", self.solutions, "solutions.")
def put_queen(self, positions, target_row):
"""
Try to place a queen on target_row by checking all N possible cases.
If a valid place is found the function calls itself trying to place a queen
on the next row until all N queens are placed on the NxN board.
"""
# Base (stop) case - all N rows are occupied
if target_row == self.size:
self.show_full_board(positions) #
self.show_short_board(positions)
self.solutions += 1
else:
# For all N columns positions try to place a queen
for column in range(self.size): # Reject all invalid
positions if self.check_place(positions,
target_row, column): positions[target_row] =
column self.put_queen(positions, target_row +
1)
def check_place(self, positions, ocuppied_rows, column):
"""
Check if a given position is under attack from any of
the previously placed queens (check column and diagonal positions)
"""
for i in range(ocuppied_rows): if
positions[i] == column or \ positions[i] - i ==
column - ocuppied_rows or \ positions[i] + i
== column + ocuppied_rows:
return False
return True
def show_full_board(self, positions):
"""Show the full NxN board"""
for row in range(self.size):
line = "" for column in
range(self.size): if
positions[row] == column:
line += "Q "
else: line
+= ". "
lO MoARcPSD| 47110589
print(line)
print("\n")
def show_short_board(self, positions):
"""
Show the queens positions on the board in compressed form, each
number represent the occupied column position in the corresponding row.
""" line = "" for i in
range(self.size): line +=
str(positions[i]) + " "
print(line)
def main():
"""Initialize and solve the n queens puzzle"""
NQueens(8)
if __name__ == "__main__":
# execute only if run as a script
main()
Code R:
library(tidyverse)
#-----------------------------------------------------------------------------
#' Try and place a Queen given a vector of positions of the current Queens
#'
#' This function calls itself recursively for every valid placement of the
#' next queen.
#'
#' @param queens A vector of integers representing the column
placement #' of queens so far. The index within this list #'
is the row, and the value is the column.
#' To generate all solutions, pass in an empty vector (the default)
#'
#' e.g. queens = c(1, 4, 7) corresponds to queens placed at c(1, 1), c(2, 4) and
#' c(3, 7)
#'
#'
#' ---------------------------------
#' | | | | | | | | |
#' ---------------------------------
#' | | | | | | | | |
#' ---------------------------------
#' | | | | | | | | |
#' ---------------------------------
#' | | | | | | | | |
#' ---------------------------------
#' | | | | | | | Q | | 3rd row, 7th column
#' ---------------------------------
#' | | | | Q | | | | | 2nd row, 4th column
#' ---------------------------------
lO MoARcPSD| 47110589
#' | Q | | | | | | | | 1st row, 1st column
#' --------------------------------#'
#'
#'
#'
#' @return a list where each element is a vector of 8 integers
#' i.e. a solution to the 8 queens problem #------------------------------------------------------------
----------------place_queen <- function(queens=c(1)) {
#--------------------------------------------------------------------------
# If there are 8 queens placed, then this must be a solution.
#--------------------------------------------------------------------------
if (length(queens) == 8) { return(list(queens))
}
#--------------------------------------------------------------------------
# Figure out where a queen can be placed in the next row.
# Drop all columns that have already been taken - since we
# can't place a queen below an existing queen
#--------------------------------------------------------------------------
possible_placements <- setdiff(1:8, queens)
#--------------------------------------------------------------------------
# For each queen already on the board, find the diagonal #
positions that it can see in this row.
#--------------------------------------------------------------------------
diag_offsets <- seq.int(length(queens), 1) diags <- c(queens +
diag_offsets, queens - diag_offsets) diags <- diags[diags > 0 &
diags < 9]
#---------------------------------------------------------------------------
# Drop these diagonal columns from possible placements
#--------------------------------------------------------------------------
possible_placements <- setdiff(possible_placements, diags)
#---------------------------------------------------------------------------
# For each possible placement, try and place a queen
#--------------------------------------------------------------------------
possible_placements %>% map(~place_queen(c(queens, .x)))
%>% keep(~length(.x) > 0) %>%
flatten()
}
#----------------------------------------------------------------------------#'
Plot a single solution
#' @param queens a vector of 8 integers giving the column positions of 8 queens
#----------------------------------------------------------------------------
plot_single_8queens <- function(queens, title = NULL) {
queens_df <- tibble(cols = queens, rows=1:8) board_df <-
lO MoARcPSD| 47110589
expand.grid(cols = 1:8, rows = 1:8) %>% mutate(check =
(cols + rows) %%2 == 1)
p <- ggplot(queens_df, aes(rows, cols)) +
geom_tile(data=board_df, aes(fill=check), colour='black') +
geom_text(label='\u2655', family="Arial Unicode MS", size = 8) +
theme_void() + coord_equal() +
scale_fill_manual(values = c('TRUE'='white', 'FALSE'='grey70')) +
theme(
legend.position = 'none'
)
if (is.null(title)) {
p <- p + labs(title = paste("Queens:", deparse(as.numeric(queens))))
} else {
p <- p + labs(title = title)
}
}
#----------------------------------------------------------------------------#
Start with no queens placed and generate all solutions.
#----------------------------------------------------------------------------solutions
<- place_queen()
v=1:8
f=function(q){L=length(q)
if(L==8){q}else{flatten(map(setdiff(v,c(q,q+L:1,q-
L:1)),~f(c(q,.))))}}
s=data.frame(c=unlist(f(c())),r=v,x=rep(1:92,e=8),z=3)
b=mutate(crossing(c=v,r=v),z=(c+r)%%2) g=geom_tile
ggplot(s,aes(r,c,fill=z))+g(d=b)+g()+facet_wrap(~x)
lO MoARcPSD| 47110589
2 Danh sách liên kết
Danh ch ln kết đơn(Single linked list) d tt nht và đơn giản nht v cu trúc d
liu đng s dng con tr để cài đặt. Do đó, kiến thc con tr rt quan trng để hiu cách
danh sách liên kết hot động, vì vy nếu bạn chưa có kiến thc v con tr thì bn nên hc
v con tr trước. Bạn cũng cn hiu mt chút v cp pt b nh động. Để đơn giản và d
hiu, phn ni dung cài đặt danh sách ln kết ca bài này s ch trình bày v danh sách liên
kết đơn.
Danh sách liên kết đơn mt tp hợp các Node được phân b động, được sp xếp theo
cách sao cho mi Node cha mt g tr (Data) mt con tr (Next). Con tr s tr đến
phn t kế tiếp ca danh sách liên kết đó. Nếu con tr mà tr ti NULL, nga đó là phần
t cui cùng ca linked list.
Cách loi danh sách ln kết:
Danh sách liên kết đơn- Linked List.
Danh sách liên kết đôi - Doubly Linked List.
Danh sách liên kết vòng - Circular Linked List.
BT06. Cài đt danh sách liên kết đơn
Danh sách liên kết đơn(Single linked list) là d tt nhất đơn gin nht
v cu trúc d liệu động s dng con tr đ cài đặt. Do đó, kiến thc con tr là
rt quan trng đ hiu cách danh sách liên kết hoạt đng, vy nếu bạn chưa
kiến thc v con tr thì bn nên hc v con tr trước. Bn ng cần hiu mt
chút v cp phát b nh động. Đ đơn gin và d hiu, phn ni dung cài đặt
danh sách liên kết ca bài viết này s ch trình bày v danh sách liên kết đơn.
Code python:
class Node:
# Function to initialise the node object
def __init__(self, data): self.data =
data # Assign data
self.next = None # Initialize next as null
# Linked List class contains a Node object class
LinkedList:
# Function to initialize head
def __init__(self):
self.head = None
# Code execution starts here if
__name__=='__main__':
# Start with the empty list
llist = LinkedList()
lO MoARcPSD| 47110589
llist.head = Node(1) second = Node(2) third =
Node(3) llist.head.next = second; # Link first node with
second second.next = third; # Link second node with the
third node Code R:
lst <- list() # creates an empty (length zero) list
lst[[1]] <- 3 # automagically extends the lst
lst[[2]] <- 4 # ditto
lst
elist <- list(vec=1:4,df=data.frame(a=1:3, b=4:6),mat=matrix(1:4, nrow=2), name="pks")
elist[["vec"]]
BT07. Cài đt danh sách liên kết kép
Code python:
Code R:
lst <- list(1, 2, 3, 4, 5) # a list of 5 items
lst <- vector("list", 10000) # 10000 NULLs
lst[[1]] <- 1
lst[[10000]] <- 10000 # lst now contains 1, NULL, ..., NULL, 10000
lst
BT08. Cài đặt ngăn xếp stack
Code python:
| 1/41

Preview text:

lO M oARcPSD| 47110589 ĐẠI HỌC HUẾ
KHOA KỸ THUẬT VÀ CÔNG NGHỆ BÁO CÁO
ĐỒ ÁN CTDL & GT NĂM HỌC 2020-2021
Giảng viên hướng dẫn: Hồ Quốc Dũng Lớp: KHDL & TTNT Số phách
( Do hội đồng chấm thi gh ) i
Thừa Thiên Huế, ngày …tháng…năm..... lO M oARcPSD| 47110589 ĐẠI HỌC HUẾ
KHOA KỸ THUẬT VÀ CÔNG NGHỆ ( MẪU BÌA PHỤ ) BÁO CÁO
ĐỒ ÁN CTDL & GT NĂM HỌC 2020-2021
Giảng viên hướng dẫn: Hồ Quốc Dũng Lớp: KHDL & TTNT
Sinh viên thực hiện: Nguyễn Phước
( ký tên và ghi rõ họ tên ) Số phách
( Do hội đồng chấm thi gh ) i
Thừa Thiên Huế, ngày …tháng…năm..... lO M oARcPSD| 47110589 Mục Lục
KHOA KỸ THUẬT VÀ CÔNG NGHỆ..........................................................................................1
KHOA KỸ THUẬT VÀ CÔNG NGHỆ..........................................................................................2
1 giải thuật đệ quy:..........................................................................................................................5
BT01. Tháp Hà Nội:....................................................................................................................5
BT02. Ước số chung lớn nhất......................................................................................................6
BT03. Tính giai thừa của 1 số......................................................................................................7
BT04. Bài toán mã đi tuần...........................................................................................................8
Hướng dẫn giải bài toán mã đi tuần.........................................................................................8
Xây dựng bước đi cho quân mã.........................................................................................8
Kiểm tra tính hợp lệ của bước đi........................................................................................8
BT05. Bài toán 8 quân hậu........................................................................................................15
Giải bài toán xếp hậu bằng đệ quy..................................................................................15
2 Danh sách liên kết.......................................................................................................................20
BT06. Cài đặt danh sách liên kết đơn........................................................................................21
BT07. Cài đặt danh sách liên kết kép........................................................................................21
BT08. Cài đặt ngăn xếp – stack.................................................................................................22
BT09. Cài đặt hàng đợi – queue................................................................................................23
3 Cây..............................................................................................................................................25
Các khái niệm cơ bản về cây nhị phân...............................................................................25
BT10. Cài đặt cây - duyệt cây theo thứ tự
trước........................................................................26
BT11. Cài đặt cây - duyệt cây theo thứ tự sau...........................................................................27
4. Đồ Thị........................................................................................................................................29
Cấu trúc dữ liệu đồ thị (Graph).............................................................................................29
BT12. Cài đặt đồ thị vô hướng..................................................................................................30
.......................................................................................................................................................30
BT13. Cài đặt đồ thị có hướng...................................................................................................33
5. Sắp xếp và tìm kiếm..................................................................................................................35
BT14. Cài đặt thuật toán sắp xếp chọn.....................................................................................35
BT15. Cài đặt thuật toán sắp xếp chèn.....................................................................................36
BT16. Cài đặt thuật toán sắp xếp nổi bọt..................................................................................38
BT17. Cài đặt thuật toán sắp xếp nhanh - quick sort................................................................38
BT18. Cài đặt thuật toán heap sort...........................................................................................40
BT19. Cài đặt thuật toán sắp xếp trộn - merge sort..................................................................45
Đường dẫn link mã nguồn:
https://github.com/NguyenPhuoc1207/Do_An_CTDL
1 giải thuật đệ quy:
Một đối tượng được mô tả thông qua chính nó được gọi là mô tả đệ quy.
Một bài toán mang tính chất đệ quy khi nó có thể được phân rã thành các bài toán nhỏ hơn
nhưng mang cùng tính chất với bài toán ban đầu, các bài toán nhỏ lại được phân rã thành các
bài toán nhỏ hơn nữa theo cùng tính chất đó.
Trong đời sống, cũng thường xuyên thấy một số hiện tượng đệ quy, ví dụ như hai chiếc gương
đặt đối diện nhau, vòng xoắn ốc (trong vòng xoắn ốc có vòng xoắn ốc nhỏ hơn). lO M oARcPSD| 47110589
Đệ quy có ưu điểm là thuận lợi cho việc biểu diễn bài toán, đồng thời làm gọn chương trình. Tuy
nhiên cũng có nhược điểm, đó là không tối ưu về mặt thời gian (so với sử dụng vòng lặp), gây
tốn bộ nhớ và có thể tràn stack nếu không kiểm soát tốt độ sâu của đệ quy.
BT01. Tháp Hà Nội:
Cách giải bài toán tháp Hà Nội bằng đệ quy
Qui ước: Đặt tên 3 cột là A B C để tiện theo dõi. Yêu cầu bài toán là chuyển n
chiếc đĩa từ cột A sang cột C Cách giải •
Đầu tiên ta lấy cột C làm cọc trung gian. Chuyển n-1 chiếc đĩa sang cột B. •
Ta chuyển chiếc đĩa lớn nhất sang cột C •
Lấy cột A làm cột trung gian chuyển n-1 chiếc đĩa từ cột B sang cột C Code python: lO M oARcPSD| 47110589 Code R:
BT02. Ước số chung lớn nhất
Một phương pháp đơn giản đề tìm USCLN của a và b là duyệt từ số nhỏ hơn trong 2 số
a và b cho đến 1, khi gặp số nào đó mà cả a và b đều chia hết cho nó thì đó chính là
USCLN của a và b. Tuy vậy phương pháp này chưa phải là hiệu quả nhất.
Vào thế kỷ 3 TCN, nhà toán học Euclid (phiên âm tiếng Việt là Ơ-clit) đã phát minh ra
một giải thuật tìm USCLN của hai số nguyên dương rất hiệu quả được gọi là giải thuật
Euclid. Cụ thể về ý tưởng của bài toán, giả sử a lớn hơn b, khi đó việc tính UCSLN của lO M oARcPSD| 47110589
a và b sẽ được đưa về bài toán tính USCLN của a mod b và b vì USCLN(a, b) = USCLN(a mod b, b).
Khi đã tìm được USCLN thì việc tìm BSCNN của hai số nguyên dương a và b khá đơn
giản. Khi đó BSCNN(a, b) = (a * b) / UCSLN(a, b). Code python: Code R:
BT03. Tính giai thừa của 1 số Code python: Code R: lO M oARcPSD| 47110589
BT04. Bài toán mã đi tuần
Hướng dẫn giải bài toán mã đi tuần
Xây dựng bước đi cho quân mã
Giọi x,y là độ dài bước đi trên các trục Oxy. Một bước đi hợp lệ của quân mã sẽ
như sau: |x| + |y| = 3 ( Với x,y > 0).
Khi đó ở một vị trí bất kì quân mã có có 8 đường có thể di chuyển. Chưa xét đến
bước đi đó có hợp lệ hay không.
Các bước đi đó là: ( -2, -1), ( -2, 1), ( -1, -2), ( -1, 2), ( 1, -2), ( 1, 2), ( 2, -1), ( 2, 1)
Để đơn giản ta sẽ tạo hay mảng X[], Y[] để chứa các giá trị trên. Với mỗi X[i],
Y[i] sẽ là một cách di chuyển của quân mã(0 ≤i≤ 7 ).
Kiểm tra tính hợp lệ của bước đi
Ta sẽ dùng một mảng hai chiều A[n*n] để lưu vị trí của từng ô trong bàn cờ. Tất
cả mảng đều khởi tạo giá trị là 0( quân mã chưa đi qua).
Giọi x,y là vị trí hiện tại của quân mã, thì vị trí tiếp theo mà quân mã đi sẽ có
dạng x+X[i], y+Y[i]. Một vị trí được gọi là hợp lệ thì sẽ thỏa mãn tính chất sau: • 0 ≤ x+X[i]≤ n-1. • 0 ≤ x+X[i]≤ n-1.
Nếu bước đi đó là bước đi đúng thì ta sẽ lưu thứ tự của bước đi đó vào mảng A[ x+X[i], y+Y[i] ]. Code python: lO M oARcPSD| 47110589 Code R: library(purrr) library(dplyr) library(tidyverse)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Knight offsets i.e. the possible movements of a knight from the current location lO M oARcPSD| 47110589
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
knight_offsets <- matrix(c( 1, 2, 2, 1, -2, 1, -1, 2, 2, -1, 1, -2, -1, -2, -2, -1 ), ncol = 2, byrow = TRUE)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#' Recurisvely calculate moves for a knight to complete a tour #'
#' @param this_move proposed next move. 2 element numeric vector of (row, col)
#' position at which to place the knight next
#' @param moves list of vectors. Each vector is length=2 and indicates the
#' row/column locations of the knight's tour so far lO M oARcPSD| 47110589
#' @param visited 8x8 logical matrix which indicates whether or not a square has been
#' visited by the knight already. When called by the user, this matrix #' must only contain FALSE
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
move_knight <- function(this_move, moves, visited) {
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Mark the move as visited
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
moves <- append(moves, list(this_move))
visited[this_move[1] + (this_move[2] - 1)*8] <- TRUE
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ # termination if all visited
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ if (all(visited)) { return(moves) } lO M oARcPSD| 47110589
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Find all possible moves from this position
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
next_move <- cbind(knight_offsets[,1] + this_move[1], knight_offsets[,2] + this_move[2])
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
# keep only moves that remain on the board
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
on_board <- next_move[,1] %in% 1:8 & next_move[,2] %in% 1:8
next_move <- next_move[on_board,,drop=FALSE]
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Keep only moves that target a location that has not yet been visited
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
not_yet_visited <- !visited[next_move] next_move <-
next_move[not_yet_visited,, drop = FALSE] lO M oARcPSD| 47110589
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Recurse over every possible next move
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
for (i in seq_len(nrow(next_move))) { res <-
move_knight(next_move[i,, drop = FALSE], moves, visited) if (!is.nul (res)) { return(res) } } NULL }
system.time({ moves <- move_knight(c(4, 8), moves = list(), visited = matrix(FALSE, 8, 8)) })
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#' Convert results to a data.frame for ggplot
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ lO M oARcPSD| 47110589
moves_df <- as.data.frame(do.call(rbind, moves))
moves_df <- set_names(moves_df, c('x', 'y'))
moves_df$idx <- 1:nrow(moves_df)
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # Plot the knight's tour
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ggplot(moves_df, aes(x, y)) +
geom_tile(aes(fill=as.logical((x+y)%%2)), colour = 'black') +
geom_path(alpha = 0.7, linetype = 1, size = 0.25) +
geom_text(aes(label = idx)) + scale_fil _manual(values = c('grey70',
'white')) + theme_void() + theme(legend.position = 'none') +
coord_equal() + labs( title = "A knight's tour in #RStats" ) lO M oARcPSD| 47110589
BT05. Bài toán 8 quân hậu
Giải bài toán xếp hậu bằng đệ quy •
Để tiện trình bày ta dùng biến i để đánh dấu các hàng từ trên xuống (
1 đến n). Dùng biến j để đánh dấu các cột từ trái sang phải ( 1 đến n ); •
Các phần tử nằm trên cùng hàng có chỉ số hàng bằng nhau; •
Các phần tử nằm trên cùng cột có chỉ số cột bằng nhau; •
Để tiện cho việc in kết quả ra thì ta chỉ in ra chỉ số các cột tuần tự theo
các hàng từ trên xuống. •
Điều kiện để đặt một quân hậu đúng chỗ là không có 2 trên cùng một
cột ( chỉ số cột khác nhau). Không có 2 quân hậu nào cùng ở trên một đường chéo. Ý tưởng: •
Đầu tiên ta đặt quân hậu thứ nhất vào các cột trên hàng 1 ( có n cách đặt ). •
Thử đặt quân hậu 2 vào từng cột ở hàng 2 sao cho không bị quân hậu
1 khống chế. Với mỗi vị trí của quân hậu này ta lại thử đặt quân hậu
thứ ba vào các cột sao cho không bị các quân hậu trước khống chế. •
Sau khi đặt xong quân hậu thứ tám thì in ra một cách đặt. Code python: """The n queens puzzle.""" class NQueens:
"""Generate all valid solutions for the n queens puzzle""" def __init__(self, size): lO M oARcPSD| 47110589
# Store the puzzle (problem) size and the number of valid solutions
self.size = size self.solutions = 0 self.solve() def solve(self):
"""Solve the n queens puzzle and print the number of solutions"""
positions = [-1] * self.size self.put_queen(positions, 0)
print("Found", self.solutions, "solutions.")
def put_queen(self, positions, target_row): """
Try to place a queen on target_row by checking all N possible cases.
If a valid place is found the function calls itself trying to place a queen
on the next row until all N queens are placed on the NxN board. """
# Base (stop) case - all N rows are occupied if target_row == self.size:
self.show_full_board(positions) #
self.show_short_board(positions) self.solutions += 1 else:
# For all N columns positions try to place a queen
for column in range(self.size): # Reject all invalid
positions if self.check_place(positions,
target_row, column): positions[target_row] =
column self.put_queen(positions, target_row + 1)
def check_place(self, positions, ocuppied_rows, column): """
Check if a given position is under attack from any of
the previously placed queens (check column and diagonal positions) """
for i in range(ocuppied_rows): if
positions[i] == column or \ positions[i] - i ==
column - ocuppied_rows or \ positions[i] + i == column + ocuppied_rows: return False return True
def show_full_board(self, positions): """Show the full NxN board""" for row in range(self.size): line = "" for column in range(self.size): if positions[row] == column: line += "Q " else: line += ". " lO M oARcPSD| 47110589 print(line) print("\n")
def show_short_board(self, positions): """
Show the queens positions on the board in compressed form, each
number represent the occupied column position in the corresponding row. """ line = "" for i in range(self.size): line += str(positions[i]) + " " print(line) def main():
"""Initialize and solve the n queens puzzle""" NQueens(8) if __name__ == "__main__":
# execute only if run as a script main() Code R: library(tidyverse)
#-----------------------------------------------------------------------------
#' Try and place a Queen given a vector of positions of the current Queens #'
#' This function calls itself recursively for every valid placement of the #' next queen. #'
#' @param queens A vector of integers representing the column
placement #' of queens so far. The index within this list #'
is the row, and the value is the column.
#' To generate all solutions, pass in an empty vector (the default) #'
#' e.g. queens = c(1, 4, 7) corresponds to queens placed at c(1, 1), c(2, 4) and #' c(3, 7) #' #'
#' --------------------------------- #' | | | | | | | | |
#' --------------------------------- #' | | | | | | | | |
#' --------------------------------- #' | | | | | | | | |
#' --------------------------------- #' | | | | | | | | |
#' ---------------------------------
#' | | | | | | | Q | | 3rd row, 7th column
#' ---------------------------------
#' | | | | Q | | | | | 2nd row, 4th column
#' --------------------------------- lO M oARcPSD| 47110589
#' | Q | | | | | | | | 1st row, 1st column
#' --------------------------------#' #' #' #'
#' @return a list where each element is a vector of 8 integers
#' i.e. a solution to the 8 queens problem #------------------------------------------------------------
----------------place_queen <- function(queens=c(1)) {
#--------------------------------------------------------------------------
# If there are 8 queens placed, then this must be a solution.
#--------------------------------------------------------------------------
if (length(queens) == 8) { return(list(queens)) }
#--------------------------------------------------------------------------
# Figure out where a queen can be placed in the next row.
# Drop all columns that have already been taken - since we
# can't place a queen below an existing queen
#--------------------------------------------------------------------------
possible_placements <- setdiff(1:8, queens)
#--------------------------------------------------------------------------
# For each queen already on the board, find the diagonal #
positions that it can see in this row.
#--------------------------------------------------------------------------
diag_offsets <- seq.int(length(queens), 1) diags <- c(queens +
diag_offsets, queens - diag_offsets) diags <- diags[diags > 0 & diags < 9]
#---------------------------------------------------------------------------
# Drop these diagonal columns from possible placements
#--------------------------------------------------------------------------
possible_placements <- setdiff(possible_placements, diags)
#---------------------------------------------------------------------------
# For each possible placement, try and place a queen
#--------------------------------------------------------------------------
possible_placements %>% map(~place_queen(c(queens, .x)))
%>% keep(~length(.x) > 0) %>% flatten() }
#----------------------------------------------------------------------------#' Plot a single solution
#' @param queens a vector of 8 integers giving the column positions of 8 queens
#------------------------------------------------------------------------ ----
plot_single_8queens <- function(queens, title = NULL) {
queens_df <- tibble(cols = queens, rows=1:8) board_df <- lO M oARcPSD| 47110589
expand.grid(cols = 1:8, rows = 1:8) %>% mutate(check = (cols + rows) %%2 == 1)
p <- ggplot(queens_df, aes(rows, cols)) +
geom_tile(data=board_df, aes(fill=check), colour='black') +
geom_text(label='\u2655', family="Arial Unicode MS", size = 8) +
theme_void() + coord_equal() +
scale_fill_manual(values = c('TRUE'='white', 'FALSE'='grey70')) + theme( legend.position = 'none' ) if (is.null(title)) {
p <- p + labs(title = paste("Queens:", deparse(as.numeric(queens)))) } else {
p <- p + labs(title = title) } }
#----------------------------------------------------------------------------#
Start with no queens placed and generate all solutions.
#----------------------------------------------------------------------------solutions <- place_queen() v=1:8 f=function(q){L=length(q)
if(L==8){q}else{flatten(map(setdiff(v,c(q,q+L:1,q- L:1)),~f(c(q,.))))}}
s=data.frame(c=unlist(f(c())),r=v,x=rep(1:92,e=8),z=3)
b=mutate(crossing(c=v,r=v),z=(c+r)%%2) g=geom_tile
ggplot(s,aes(r,c,fill=z))+g(d=b)+g()+facet_wrap(~x) lO M oARcPSD| 47110589
2 Danh sách liên kết
Danh sách liên kết đơn(Single linked list) là ví dụ tốt nhất và đơn giản nhất về cấu trúc dữ
liệu động sử dụng con trỏ để cài đặt. Do đó, kiến thức con trỏ là rất quan trọng để hiểu cách
danh sách liên kết hoạt động, vì vậy nếu bạn chưa có kiến thức về con trỏ thì bạn nên học
về con trỏ trước. Bạn cũng cần hiểu một chút về cấp phát bộ nhớ động. Để đơn giản và dễ
hiểu, phần nội dung cài đặt danh sách liên kết của bài này sẽ chỉ trình bày về danh sách liên kết đơn.
Danh sách liên kết đơn là một tập hợp các Node được phân bố động, được sắp xếp theo
cách sao cho mỗi Node chứa một giá trị (Data) và một con trỏ (Next). Con trỏ sẽ trỏ đến
phần tử kế tiếp của danh sách liên kết đó. Nếu con trỏ mà trỏ tới NULL, nghĩa là đó là phần
tử cuối cùng của linked list.
Cách loại danh sách liên kết: •
Danh sách liên kết đơn- Linked List. •
Danh sách liên kết đôi - Doubly Linked List. •
Danh sách liên kết vòng - Circular Linked List.
BT06. Cài đặt danh sách liên kết đơn
Danh sách liên kết đơn(Single linked list) là ví dụ tốt nhất và đơn giản nhất
về cấu trúc dữ liệu động sử dụng con trỏ để cài đặt. Do đó, kiến thức con trỏ là
rất quan trọng để hiểu cách danh sách liên kết hoạt động, vì vậy nếu bạn chưa
có kiến thức về con trỏ thì bạn nên học về con trỏ trước. Bạn cũng cần hiểu một
chút về cấp phát bộ nhớ động. Để đơn giản và dễ hiểu, phần nội dung cài đặt
danh sách liên kết của bài viết này sẽ chỉ trình bày về danh sách liên kết đơn. Code python: class Node:
# Function to initialise the node object
def __init__(self, data): self.data = data # Assign data
self.next = None # Initialize next as null
# Linked List class contains a Node object class LinkedList:
# Function to initialize head def __init__(self): self.head = None
# Code execution starts here if __name__=='__main__': # Start with the empty list llist = LinkedList() lO M oARcPSD| 47110589
llist.head = Node(1) second = Node(2) third =
Node(3) llist.head.next = second; # Link first node with
second second.next = third; # Link second node with the third node Code R:
lst <- list() # creates an empty (length zero) list
lst[[1]] <- 3 # automagically extends the lst lst[[2]] <- 4 # ditto lst
elist <- list(vec=1:4,df=data.frame(a=1:3, b=4:6),mat=matrix(1:4, nrow=2), name="pks") elist[["vec"]]
BT07. Cài đặt danh sách liên kết kép Code python: Code R:
lst <- list(1, 2, 3, 4, 5) # a list of 5 items
lst <- vector("list", 10000) # 10000 NULLs lst[[1]] <- 1
lst[[10000]] <- 10000 # lst now contains 1, NULL, ..., NULL, 10000 lst
BT08. Cài đặt ngăn xếp – stack Code python: