Ngăn xếp (tt)

Một phần của tài liệu Danh sách list trong cấu trúc dữ liệu (Trang 101 - 115)

5. Danh sách hạn chế

5.2.Ngăn xếp (tt)

5.2.1. Cấu trúc dữ liệu

Biểu diễn và tổ chức bằng danh sách đặc typedef struct SC { int Size; int SP; T * List; } CSTACK; CSTACK CSList;

Biểu diễn và tổ chức bằng danh sách liên kết typedef struct SElement

{ T Key;

SElement *Next; } SOneElement;

typedef struct SOneElement *SSTACK; SSTACK SSP;

5.2. Ngăn xếp (tt)

5.2.2. Các thao tác trên ngăn xếp tổ chức bằng danh sách đặc 5.2.2.a. Khởi tạo ngăn xếp (Initialize)

5.2.2.b. Thêm 1 phần tử vào ngăn xếp (Push)

5.2.2.c. Lấy nội dung 1 phần tử trong ngăn xếp ra xử lý (Pop) 5.2.2.d. Hủy ngăn xếp

103

5.2. Ngăn xếp (tt)

5.2.2.a. Khởi tạo ngăn xếp (dùng danh sách đặc)

B1: CSList.Size = MaxSize

B2: CSList.List = new T[MaxSize] B3: IF (CSList.List == NULL)

Thực hiện BKT

B4: CSList.SP = CSList.Size +1 BKT: Kết thúc

T * CSInitialize(CSTACK &SList, int MaxSize) { SList.Size = MaxSize;

SList.List = new T[MaxSize]; if (SList.List == NULL)

return (NULL);

SList.SP = SList.Size ; return (SList.List);

5.2. Ngăn xếp (tt)

5.2.2.b. Thêm 1 phần tử vào ngăn xếp (dùng danh sách đặc)

B1: IF (CSList.SP == 1) Thực hiện BKT

B2: CSList.SP --

B3: CSList.List[CSList.SP] = NewData BKT: Kết thúc

int CSPush(CSTACK &SList, T NewData) { if (SList.SP == 0) return (-1); SList.SP -= 1; SList.List[SList.SP] = NewData; return (SList.SP); }

105

5.2. Ngăn xếp (tt)

5.2.2.c. Lấy nội dung 1 phần tử trong ngăn xếp ra xử lý (dùng danh sách đặc) B1: IF (CSList.SP == CSList.Size +!) Thực hiện BKT B2: Data = CSList.List[CSList.SP] B3: CSList.SP++ BKT: Kết thúc

int CSPop(CSTACK &SList, T &Data) { if (SList.SP == SList.Size) return (-1); Data = SList.List[SList.SP]; SList.SP += 1; return (1); } (adsbygoogle = window.adsbygoogle || []).push({});

5.2. Ngăn xếp (tt)

5.2.2.d. Hủy ngăn xếp (dùng danh sách đặc)

int CSDelete(CSTACK &SList) {

delete SList.SList; return;

107

5.2. Ngăn xếp (tt)

5.2.2. Các thao tác trên ngăn xếp tổ chức bằng danh sách liên kết 5.2.3.a. Khởi tạo ngăn xếp (Initialize)

5.2.3.b. Thêm 1 phần tử vào ngăn xếp (Push)

5.2.3.c. Lấy nội dung 1 phần tử trong ngăn xếp ra xử lý (Pop) 5.2.3.d. Hủy ngăn xếp

5.2. Ngăn xếp (tt)

5.2.3.a. Khởi tạo ngăn xếp (dùng danh sách liên kết)

SSTACK SSInitialize (SSTACK &SList) { SList = NULL;

return (SList); }

109

5.2. Ngăn xếp (tt)

5.2.3.b. Thêm 1 phần tử vào ngăn xếp (dùng danh sách liên kết)

B1: NewElement = SLLCreateNode(NewData) B2: if (NewElement == NULL) Thực hiện BKT B3: if (SSP == NULL) B3.1: SSP = NewElement B3.2: Thực hiện BKT B4: NewElement ->Next = SSP B5: SSP = NewElement BKT: Kết thúc

5.2. Ngăn xếp (tt)

5.2.3.b. Thêm 1 phần tử vào ngăn xếp (dùng danh sách liên kết)

SSTACK SSPush (SSTACK &SList, T NewData)

{ SSTACK NewElement = SLLCreateNode(NewData); if (NewElement == NULL)

return (NULL);

NewElement ->Next = SList; SList = NewElement;

return (NewElement); }

111

5.2. Ngăn xếp (tt)

5.2.3.c. Lấy nội dung 1 phần tử trong ngăn xếp ra xử lý (dùng danh sách liên kết)

B1: if (SSP == NULL) Thực hiện BKT

B2: TempElement = SSP B3: SSP = SSP ->Next

B4: TempElement ->Next = NULL B5: Data = TempElement->Key B6: delete TempElement- (adsbygoogle = window.adsbygoogle || []).push({});

5.2. Ngăn xếp (tt)

5.2.3.c. Lấy nội dung 1 phần tử trong ngăn xếp ra xử lý (dùng danh sách liên kết)

int SSPop (SSTACK &SList, T &Data) {

if (SList == NULL) return (-1);

SSTACK TempElement = SList; SList = SList ->Next;

TempElement ->Next = NULL; Data = TempElement->Key; delete TempElement;

return (1); }

113

5.2. Ngăn xếp (tt)

5.2.3.d. Hủy ngăn xếp (dùng danh sách liên kết)

void SSDelete (SSTACK &SList) {

while (SList != NULL)

{ SSTACK TempElement = SList; SList = SList ->Next;

TempElement ->Next = NULL; delete TempElement;

} }

5.2. Ngăn xếp (tt)

5.3. Ứng dụng của danh sách hạn chế

 Hàng đợi dùng trong nhiều trường hợp lưu trữ dữ liệu cần xử lý tuần tự.

 Ngăn xếp dùng trong việc xử lý dữ liệu truy hồi, đặc biệt trong việc xử lý đệ quy của các thuật giải.

115

Một phần của tài liệu Danh sách list trong cấu trúc dữ liệu (Trang 101 - 115)