Ngăn xếp cùng hàng đợi là hồ hết cấu trúc dữ liệu quan trọng. Bài viết chia sẻ code chống xếp stack C/C++ thiết lập bằng mảng một chiều nhỏ trỏ. Cách áp dụng của stack vào bài bác tập thống trị danh sách liên kết.

Bạn đang xem: Cài đặt stack bằng mảng


1. Phòng xếp – Stack là gì?

Ngăn xếp ( Stack ) trong C ++ là một kết cấu dữ liệu tương tự như danh sách liên kết đơn, tuyệt Queue mặt hàng đợi.dạng danh sách liên kết đặc biệt trong đó vấn đề thêm vào, rước ra bộ phận chỉ triển khai ở một đầu của danh sách.

Đặc điểm của phòng xếp: theo đúng quy dụng cụ ” vào trước ra sau “ tuyệt là ” vào sau ra trước” ( FILO – First In Last Out hoặc LIFO – Last In First OUT )Bạn hình dung buổi giao lưu của cấu trúc này tương tự như vấn đề bạn xếp một ông xã bát, đĩa. Cách bạn thêm vào và mang ra chúng đến dễ hiểu.

Ngoài ngữ điệu lập trình C/C++, thì tất cả các ngôn ngữ khác như Python, C#, PHP, Java, Javascript . . . đều áp dụng tới kết cấu này!

Hình hình ảnh mô phòng phòng xếp:

*

1.1 các dạng màn biểu diễn của phòng xếp

Thực hóa học stack là một danh sách links , nên chúng ta có thể sử dụng một trong các dạng setup sau:

Cài để stack bằng list liên kếtBiểu diễn trực tiếp phòng xếp bởi mảng một chiềuCài đặt bởi con trỏ (sử dụng những node stack)

Ở nội dung bài viết này bản thân sẽ thực hiện cách thứ hai tức thực hiện mảng 1 chiều.Xem chống xếp stack dòng đặt bằng con trỏ.

1.2 các phép toán trên ngăn xếp

Đối với cấu trúc dữ liệu stack, bạn chắc hẳn rằng sẽ phải thực hiện những phép toán sau:

Tạo phòng xếp rỗng : Hàm Init (S )Thêm phần tử vào đầu phòng xếp : Hàm Push(S,x) Lấy thành phần khỏi danh sách: Hàm Pop(S)Kiểm tra ngăn xếp rỗng: Hàm Isempty(S)Chèn bộ phận vào địa điểm bất kì: Hàm Insert_k (S, x, k)

Lưu ý rằng các tên hàm mình kể bên trên là do các bạn tự định nghĩa. Vì code trong bài xích mình sẽ đặt têm hàm như vậy phải mình viết cho bạn đọc dễ nắm bắt thôi nhé!

2. Phòng xếp thiết đặt bằng mảng

Bài toán: cài đặt ngăn xếp stack các số nguyên, viết hàm chèn phần tử vào địa điểm bất kỳ!

Mình vẫn sử dụng ngôn từ C++ để giải quyết và xử lý bài toán nhé! nếu như khách hàng đang tra cứu code C thì chỉ cần thay đổi câu lệnh nhập xuất cin, cout thành scanf, printf là được.Hoặc coi phần 4 tất cả nha!

Chú ý: Lỗi hiển thị, mình ko biết lý do nhưng tất cả dấutrong bài viết đều gửi thành &amp ;

*

2.1 Khai báo thiết đặt ngăn xếp

Ngăn xếp stack cài đặt bằng mảng một chiều sẽ gồm một thay đổi Top sử dụng đế lưu địa chỉ hiện tại, vị trí đỉnh của phòng xếp.Thành phần thứ hai là mảng chứa Data dữ liệu.


//// Cai dat ngan xeptypedef int item; // Kieu cua ngan xep#define Max 100 // So phan tu toi domain authority cua Stackstruct Stackint Top;item Data;;Stack S; // Khai bao ngan xep S

2.2 đội hàm khởi sản xuất và kiểm tra

Hàm khởi chế tạo ngăn xếp: chỉ cần cho giá trị của biến hóa Top = 0 là xong.Hàm bình chọn rỗng thì trái lại trả về đúng nếu thay đổi Top == 0 là được.


//Khoi tao ngan xepvoid Init (Stack và S)S.Top = 0;//Kiem tra ngan xep rongint Isempty( Stack S)return (S.Top==0);//Kiem tra ngan xem dayint Isfull(Stack S)return (S.Top == Max);

2.3 Thêm thành phần vào đầu stack – Hàm Push

Hàm Push dùng để làm thêm phần tử vào đầu phòng xếp.Nếu ngăn xếp vẫn đầy thì không được cho phép thêm, còn ngược lại thì:

Tăng biến Top lên một đơn vị chức năng rồi gán Data ở trong phần Top bằng x. Như vậy giá trị x sẽ được sản xuất đầu danh sách.

Xem thêm: " Bộ Lưu Điện Ups Santak Tháng 10/2021, Bộ Lưu Điện Ups Santak


2.4 Hàm lấy bộ phận đầu – Pop Stack

Hàm này thực chất tương từ hàm Push. Bạn phải khai báo một biến dùng để làm đựng giá trị của thành phần đầu stack. Sau đó tiết kiệm chi phí với chính sách giảm giá trị của biến hóa Top, return về biến đổi đã lưu.Đoạn chất vấn ngăn xếp rỗng bao gồm làm hay không là tùy bạn nhé!


2.5 Hàm chèn vào địa điểm k bất kì trong ngăn xếp

Chèn vào vị trí bất kì sẽ tinh vi hơn không ít hàm chèn đầu. Chính vì phải thao tác làm việc với stack theo như đúng nguyên tắc “Vào trước ra sau ” (Fisrt In Last Out) cần mới phức tạp.

Minh áp dụng cả hàm Push với hàm Pop vào hàm này. Ý tưởng giới thiệu là khai báo một Stack trong thời điểm tạm thời dùng đế lưu trữ giá trị từ vị trí k mang đến vị trí Pop của list cần chèn.

Tức là các bạn lấy giá bán trị thoát khỏi ngăn xếp cho tới vị trí phải chèn , sau đó chèn bộ phận cần chèn vào. Sau thời điểm chèn thì lại thêm lại các thành phần vừa đem ra.

Xem code cho cấp tốc hiểu nào:


//// Chen phan tu x vao vi tri kvoid Insert_k(Stack và S, thành phầm x, int k)if(kS.Top)cout=k) // Chuyen phan tu tu S quý phái TemptPush(Tempt, Pop(S));Push(S,x); // Them phan tu x vao vi tri kwhile(Tempt.Top>0) // Lay lai gia tri ve SPush(S,Pop(Tempt));}

2.6 Hàm nhập bộ phận – Input

Nhập ra sao là phụ thuộc vào từng bài xích toán. Tùy theo cách bạn muốn nhập bộ phận vào phòng xếp.

Ở phía trên mình quản lý ngăn xếp những số nguyên nên gồm thế khác vụ việc bạn phải tìm một chút. Mặc dù bạn chỉ cần sửa một chút ít phần nhập tài liệu từ keyboard là ok.

Mình viết hàm nếu nhập quý hiếm là 0 thì sẽ hoàn thành nhập. Bạn xem thêm nhé!


2.7 Hàm xuất – output đầu ra Stack

Xuất dữ liệu ra màn hình thì thật đối kháng giản. Dùng Pop đế lấy quý giá và in ra màn hình hiển thị là ok rồi.


3. Công tác hoàn chỉnh

Tham khảo toàn bộ bài code này bên trên Github của bản thân tại đây!Xem code thiết đặt bằng bé trỏ tại đây

Nếu chúng ta viết với ngôn ngữ C thì thay đổi chút khai báo thư viện, lệnh nhập xuất (cin, cout thành scantf, printf tương xứng là được nhé)

Code Stack C++:


// Ngan xep cai dat bang mang/*Cac đắm đuối can viet: + Them phan tu vao dinh Push + Xoa phan tu khoi dinh Pop + Nhap xuat du lieu + Them xoa o day phan tu*/#includeusing namespace std;// Cai dat ngan xeptypedef int item; // Kieu cua ngan xep#define Max 100 // So phan tu toi da cua Stackstruct Stackint Top;item Data;;Stack S; // Khai bao ngan xep S//Khoi tao ngan xepvoid Init (Stack và S)S.Top = 0;//Kiem tra ngan xep rongint Isempty( Stack S)return (S.Top==0);//Kiem tra ngan xem dayint Isfull(Stack S)return (S.Top == Max);//Ham Push them phan tu x vao dau ngan xepvoid Push(Stack & S, cống phẩm x)if(Isfull(S))coutS.Top)cout=k) // Chuyen phan tu tu S quý phái TemptPush(Tempt, Pop(S));Push(S,x); // Them phan tu x vao vi tri kwhile(Tempt.Top>0) // Lay lai gia tri ve SPush(S,Pop(Tempt));}// ham Nhapvoid Input(Stack&S)cout>x;if(x!=0)Push(S,x);while(x!=0);}//Ham xuatvoid Output(Stack S){while(S.Top!=0)cout

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *