顺序栈的实现

 出现delete释放边界 超出 new创建的内存边界的情况!报错!删去delete后不报错!

但未释放内存!暂未得到解决!!!!!!

CRT detected that the application wrote to memory after end of heap buffer_wu_lai_314的专栏-CSDN博客

看该文章!!!!

#pragma once
const int MAX_SIZE = 100;
class stack
{
private:
	char* data;//属性:线性表!
	int size;//堆栈实际大小
	int top;//栈顶
public:
	stack();//默认构造函数
	stack(int s);//有参构造函数
	~stack();//析构函数
	void push(char ch);//入栈
	char pop();//出栈并返回栈顶元素
	char getTop();//获得栈顶元素但不出栈
	bool isEmpty();//判断栈是否为空
	bool isFull();//判断栈是否满
	void setNull();//设置栈为空!!!!
};

#include "stack.h"
#include <iostream>
using namespace std;
stack::stack() {
	size = MAX_SIZE;
	top = -1;
	data = new char(MAX_SIZE);
}
stack::stack(int s) {
	size = s;
	top = -1;
	data = new char(size);
}
stack::~stack()
{
	delete[] data;//内存回收 释放new创建data占用的内存
	//释放内存超出所分配的边界!报错!!!?删去该行代码九回复正常!why????
	cout << "finished delete\n";
}
void stack::push(char ch) {
	if (!isFull()) 
		data[++top] = ch;
		//return true;
}
char stack::pop() {
	if (!isEmpty()) 
		return data[top--];
}
char stack::getTop() {
	if (!isEmpty()) 
		return data[top];
}
bool stack::isEmpty() {
	if (top == -1) {
		return true;
	}
	else {
		return false;
	}
}
bool stack::isFull() {
	if (top == size-1 ) {
		return true;
	}
	else {
		return false;
	}
}
void stack::setNull() {
	top = -1;
	cout << "top=-1!\n";
}

#include "stack.h"
#include <iostream>
using namespace std;
int main() {
	stack st(5);//利用构造函数初始化

	//stack::stack();
	char ch;
	while (!st.isFull()) {
		cout << "请输入需要压入栈中的内容:\n";
		cin >> ch;
		st.push(ch);
	}

	cout << "\n输出栈顶数据:";
	cout << st.getTop() << endl;

	cout << "全部数据为:";
	while (!st.isEmpty()) {
		cout << st.pop() << " ";
	}

	if (st.isEmpty())
		cout << "栈已全部弹出!\n";
	else
		cout << "栈未全部弹出!\n";
	st.setNull();
	st.~stack();
	return 0;
}

懒猫老师版:(仍然存在delete那个问题!!!!!)

#include "stack.h"
#include <iostream>
using namespace std;
int main() {
	stack st(2);//利用构造函数初始化
	st.push('a');
	st.push('b');
	cout << st.isFull() << endl;
	cout << st.getTop() << endl;
	cout << st.pop() << endl;
	cout << st.pop() << endl;
	cout << st.isEmpty() << endl;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值