Data Structures (2110211) - CP::stack
สรุปเนื้อหาวิชา Data Structures (2110211) ภาคเรียนที่ 1 ปีการศึกษา 2567
Written by RuffLogix on September 23, 2024
# CU Intania x CP
# 2110211

Table of Contents
Stack
โครงสร้างข้อมูลที่ทำงานแบบ Last-in First-out (LIFO) ซึ่งมีการดำเนินการหลัก ๆ ดังนี้
push(x)
เพิ่มข้อมูลเข้าไปใน stackpop()
นำข้อมูลออกจาก stacktop()
ดูข้อมูลที่อยู่บนสุดของ stackempty()
ตรวจสอบว่า stack ว่างหรือไม่size()
ดูขนาดของ stack
โดยแต่ละการดำเนินการจะใช้เวลาเพียง เท่านั้น
#ifndef _CP_STACK_INCLUDED#define _CP_STACK_INCLUDED
#include <iostream>
namespace CP { template <typename T> class stack { protected: T *mData; size_t mSize; size_t mCap;
void expand(size_t capacity) { T *arr = new T[capacity](); for (size_t i=0; i<mSize; i++) { arr[i] = mData[i]; } delete [] mData; mData = arr; mCap = capacity; }
void ensureCapacity(size_t capacity) { if (capacity > mCap) { size_t newCapacity = (capacity > mCap * 2) ? capacity : mCap * 2; expand(newCapacity); } } public: stack() { mData = new T[1](); mCap = 1; mSize = 1; }
stack(const stack<T> &s) { ensureCapacity(s.size()); for (size_t i=0; i<s.size(); i++) { this->mData[i] = s.mData[i]; } }
stack<T>& operator= (const stack<T>& other) { using std::swap; ensureCapacity(other.mCap); for (size_t i=0; i<other.mSize; i++) { this->mData[i] = other.mData[i]; } this->mSize = other.mSize; return *this; }
~stack() { delete [] mData; }
bool empty() const { return mSize == 0; }
size_t size() const { return mSize; }
T& top() const { return mData[size() - 1]; }
void push(const T& element) { ensureCapacity(mCap + 1); mData[mSize++] = element; }
void pop() { mSize--; } };}#endif