c++类实现栈

自己设计的类实现栈;

类的声明:

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();
}

结果为:

 自己做的,有不足希望大佬指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值