自己设计的类实现栈;
类的声明:
class stack {
private:
char* p;//开辟空间的指针;
char* top;
char* base; //栈顶栈底指针;
int stack_size;//记录栈的大小;
int space_used;//记录已用空间大小;
public:
stack() {
p = new char[1];
base = top = p;
stack_size = 1;
space_used = 0;
*top = '\0';
} //默认空间为1;且初始化元素为空值'\0';
stack(int size);
void push_stack(char c);//入栈
void pop_stack();//出栈
void display();//输出栈元素
void empty();//判断是否空栈
~stack() {
delete[] p;
p=top = base = NULL;
}
}
类方法的实现:
初始化类:
stack::stack(int size) {
if (size <= 0) { cout << "无意义!"; exit(0); }//栈的大小小于等于0则自动退出;
else {
p = new char[size];//用数组实现栈;
stack_size = size;
top = p;
base = p;
*top = '\0'; //对第一元素初始化为空值;
space_used = 0;
}
}
入栈函数:
void stack::push_stack(char c) {
if (space_used + 1 == stack_size) { //判断是否满栈,满栈时;
char* q = new char[stack_size + 1]; //开辟新空间;
strcpy(q, p); //复制之前的内容;
delete[] p; //删除之前的空间;
p = q; //让p指向新的空间;
base = p; //重新对栈底栈顶指针赋值;
top = base + space_used;
space_used++;
stack_size++; //记录大小变化;
*top = c; //压入新元素;
top++; //将top指针后移,指向栈顶;
*top = '\0';
}
else { //未满栈时;
*(top) = c; //压入新元素;
top++; //将top指针后移,指向栈顶;
*top = '\0';
space_used++; //记录大小变化;
}
}
出栈函数:
void stack::pop_stack() {
if (top==base) { //判断是否空栈,为空栈时;
cout << "空栈无法出栈!"<<endl;
}
else { //非空栈时;
space_used--;
top--; //top指针前移
*top = '\0'; //删除元素
}
}
输出函数:
void stack::display() {
cout << "栈大小: " << stack_size<<endl;
cout << "已用空间大小: " << space_used<<endl;
cout << "栈内容: ";
for (int i = 0; i < space_used; i++) {
cout << *(p + i)<<" ";
}
cout << endl;
}
判空函数:
oid stack::empty() {
if (base == top) { cout << "空栈!"<<endl; }
else {
cout << "非空"<<endl;
}
}
试运行:
int main() {
stack a(20), b, c(10);
a.display();
b.display();
c.display();
}
结果为:
自己做的,有不足希望大佬指正