Nhảy chuyển đến

Sạn

Dẫn vào

Sạn là OI trung bình dùng một loại tuyến tính số liệu kết cấu. Thỉnh chú ý, bổn văn chủ yếu giảng chính là sạn loại này số liệu kết cấu, mà phi trình tự vận hành khi hệ thống sạn / sạn không gian.

Sạn sửa chữa cùng phỏng vấn là dựa theo sau tiến trước ra nguyên tắc tiến hành, bởi vậy sạn thông thường được xưng là là sau tiến trước ra ( last in first out ) biểu, tên gọi tắt LIFO biểu.

Warning

LIFO biểu đạt chính làTrước mặt ở vật chứaNội cuối cùng tiến vào trước hết đi ra ngoài.

Chúng ta suy xét như vậy một cái sạn

1
2
3
4
push(1)
pop(1)
push(2)
pop(2)

Nếu từ chỉnh thể suy xét, 1 trước hết nhập sạn, trước hết ra sạn, 2 cuối cùng nhập sạn, cuối cùng ra sạn, như vậy liền thành một cái tiên tiến trước ra biểu, hiển nhiên là sai lầm.

Cho nên, ở suy xét số liệu kết cấu là LIFO vẫn là FIFO thời điểm, hẳn là suy xét ở trước mặt vật chứa nội tình huống.

Sử dụng số tổ bắt chước sạn

Chúng ta có thể phương tiện sử dụng số tổ tới bắt chước một cái sạn, như sau:

Thực hiện
1
2
3
4
5
6
7
8
9
10
11
intst[N];
// nơi này sử dụng st[0] ( tức *st) đại biểu sạn trung nguyên tố số lượng, đồng thời cũng là sạn đỉnh hạ tiêu

// áp sạn:
st[++*st]=var1;
// lấy sạn đỉnh:
intu=st[*st];
// đạn sạn: Chú ý vượt rào vấn đề, *st == 0 khi không thể tiếp tục bắn ra
if(*st)--*st;
// quét sạch sạn
*st=0;
1
2
3
4
5
6
7
8
9
10
11
12
13
st=[0]*N
# nơi này sử dụng st[0] đại biểu sạn trung nguyên tố số lượng, đồng thời cũng là sạn đỉnh hạ tiêu

# áp sạn:
st[st[0]+1]=var1
st[0]=st[0]+1
# lấy sạn đỉnh:
u=st[st[0]]
# đạn sạn: Chú ý vượt rào vấn đề, *st == 0 khi không thể tiếp tục bắn ra
ifst[0]:
st[0]=st[0]-1
# quét sạch sạn
st[0]=0

C++ STL trung sạn

C++ trung STL cũng cung cấp một cái vật chứastd::stack,Sử dụng trước yêu cầu dẫn vàostackĐầu văn kiện.

STL trung đốistackĐịnh nghĩa
1
2
3
4
5
// clang-format off
template
classT,
classContainer=std::dequeT>
>classstack;

TVì stack trung muốn tồn trữ số liệu loại hình.

ContainerVì dùng cho tồn trữ nguyên tố tầng dưới chót vật chứa loại hình. Cái này vật chứa cần thiết cung cấp thông thường ngữ nghĩa dưới đây hàm số:

  • back()
  • push_back()
  • pop_back()

STL vật chứastd::vector,std::dequeCùngstd::listThỏa mãn này đó yêu cầu. Nếu không chỉ định, tắc cam chịu sử dụngstd::dequeLàm tầng dưới chót vật chứa.

STL trungstackVật chứa cung cấp một chúng thành viên hàm số lấy cung thuyên chuyển, trong đó tương đối thường dùng có:

  • Nguyên tố phỏng vấn
    • st.top()Phản hồi sạn đỉnh
  • Sửa chữa
    • st.push()Cắm vào truyền vào tham số đến sạn đỉnh
    • st.pop()Bắn ra sạn đỉnh
  • Dung lượng
    • st.empty()Phản hồi hay không vì không
    • st.size()Phản hồi nguyên tố số lượng

Ngoài ra,std::stackCòn cung cấp một ít giải toán phù. Tương đối thường dùng chính là sử dụng phú giá trị giải toán phù=stackPhú giá trị, thí dụ mẫu:

1
2
3
4
5
6
7
8
9
10
11
12
// tân kiến hai cái sạn st1 cùng st2
std::stackint>st1,st2;

// vì st1 trang nhập 1
st1.push(1);

// đem st1 phú giá trị cấp st2
st2=st1;

// phát ra st2 sạn đỉnh nguyên tố
coutst2.top()endl;
// phát ra: 1

Sử dụng Python trung list bắt chước sạn

Ở Python trung, ngươi có thể sử dụng danh sách tới bắt chước một cái sạn:

Thực hiện
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
st=[5,1,4]

# sử dụng append() hướng sạn đỉnh tăng thêm nguyên tố
st.append(2)
st.append(3)
# >>> st
# [5, 1, 4, 2, 3]

# sử dụng pop lấy ra sạn đỉnh nguyên tố
st.pop()
# >>> st
# [5, 1, 4, 2]

# sử dụng clear quét sạch sạn
st.clear()

Tham khảo tư liệu

  1. std::stack - zh.cppreference