如何完成一个整形数据的堆栈类并测试

brucelee520 2005-12-27 07:40:39
要求:使用指针存储数据;提供压栈和出栈的公共接口;构造函数通过容量参数构造堆栈,栈容量参数缺省直为0;析构函数完成堆栈的释放,要求提供深拷贝复制构造函数;堆栈的容量可以自动调整;进行测试,
——————————————
我弄了好几天了,一直没弄成功,极度郁闷中,请各位大虾给个例子,让我这个好学的新手参考参考吧,谢谢
...全文
228 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
bombwang 2006-01-15
  • 打赏
  • 举报
回复
mark
lxb365 2006-01-15
  • 打赏
  • 举报
回复
自己写数据类型是考试经常考的问题,非常检验你对数据结构的理解,我建议你自己写,很锻炼人的。关于堆栈类,其实是用一个动态数组作为基本存储对象,所以你的第一步是建立一个动态数组,第二步就是在这个数组的基础上定义堆栈的操作,因此写2个文件就可以了,一个array.h,一个stack.h,剩下的你自己考虑吧。
逸学堂 2006-01-15
  • 打赏
  • 举报
回复
楼主,开一贴问两题,一石而鸟!
直接看看CPoint怎么定义的很容易就解决了!

#include <math.h>
using namespace::std;
// 线类
class line
{
public:
line(int,int,int,int);
~line();
void Offset(int x,int y = 0);
float getline();
void Display();
private:
int X1;
int Y1;
int X2;
int Y2;
};

// 构造函数
line::line(int X1,int Y1,int X2,int Y2):X1(X1),Y1(Y1),X2(X2),Y2(Y2)
{
}

// 修改函数
line::~line()
{
}
// 平移 x平移, y平移
void line::Offset(int x,int y /* = 0 */)
{
X1 += x;
X2 += x;
Y1 += y;
Y2 += y;
}
// 获得线的长度
float line::getline()
{
int X(abs(X1 - X2));
int Y(abs(Y1 - Y2));
return (static_cast<float>(sqrt(pow(X,2)+pow(Y,2))));
}

// 输出信息

void line::Display()
{
cout << "(" << X1 << "," << Y1 << "," << X2 << "," << Y2 << ")" << endl;
}

brucelee520 2006-01-15
  • 打赏
  • 举报
回复
哪位大虾能帮忙用C++编个程序不?急用的啊,拜托哦!
题目:编写一个直线类,要求完成类的声名和定义,要求该类至少有以下成员函数;1。通过(X1,Y1,X2,Y2)构造直线类;2。析构函数3。直线的平移4。求直线的长度。5求点到直线的距离6。假设直线的两个坐标点为(10,20),(100,100),按照格式(10,20,100,100)输出直线的信息
注意:所有的成员函数要求在类声明之外(即类体之外)给出其实现部分
Rick_ang 2005-12-29
  • 打赏
  • 举报
回复
运行有什么错误帖上来,人家题目要求写栈怎么还能用stl呢
我啃 2005-12-29
  • 打赏
  • 举报
回复
建议使用std::stack
1)效率高
2)分配器好
3)标准化
4)一切都比自己写好
jiejienihao 2005-12-28
  • 打赏
  • 举报
回复
大家都是高手啊 ,希望大家多多指教我这位刚刚涉足编程一族!!~~~在次感谢大家了啊

brucelee520 2005-12-28
  • 打赏
  • 举报
回复
这个程序运行有错误啊,哪位大侠能帮该下吗?急用啊,多谢拉
brucelee520 2005-12-28
  • 打赏
  • 举报
回复
谢谢二位,呵呵
vollin 2005-12-27
  • 打赏
  • 举报
回复
#include <stack>

std::stack
直接用不就行了?
Rick_ang 2005-12-27
  • 打赏
  • 举报
回复
Push写错了~~改动一下:
int Push(int elem)
{
if(size==stacksize) //这里改成这个
{
base=(int*)realloc(base,(stacksize+20)*sizeof(int));
if(!base) exit(-1);
top=base+MAX_SIZE;
stacksize+=20;
}
*top++=elem;
size++;
return 1;
}
Rick_ang 2005-12-27
  • 打赏
  • 举报
回复
题目不太清楚,好象是要求用链表做,但是看后面又像是在构造函数里面new出一段空间..
我写一个吧,你拿来看看

#include <iostream>
#include <stdlib.h>
using namespace std;
const int MAX_SIZE=100;
class Stack
{
private:
int *base;
int *top;
int size;
int stacksize;//full size
public:
Stack(){
base=top=NULL;
size=0;
stacksize=MAX_SIZE;
}
Stack(int s=0){
base=new int [s];
if(!base) exit(-1);
top=base;
size=0;
stacksize=MAX_SIZE;
}
Stack(Stack& s)
{
if(s.stacksize>=size)
for(int j=0;j<size;j++)
*(s.base+j)=*(base+j);
else{
s.base=(int*)realloc(s.base,size*sizeof(int));
if(!s.base) exit(-1);
for(int i=0;i<size;i++)
*(s.base+i)=*(base+i);
}
}
int Pop()
{
if(size==0)
{
cout<<"Stack Empty,can not pop."<<endl;
}
else
{
int result;
result=*top;
top--;
size--;
return result;
}
}
int Push(int elem)
{
if(size==MAX_SIZE)
{
base=(int*)realloc(base,(stacksize+20)*sizeof(int));
if(!base) exit(-1);
top=base+MAX_SIZE;
stacksize+=20;
}
*top++=elem;
size++;
return 1;
}
bool Empty()
{
return size==0;
}
~Stack()
{
delete []base;
top=NULL;
}
};

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧