2017《面向对象程序设计》课程作业五
题目描述
- 经过第四次作业,相信大家都对面向对象的分析与设计有了萌芽式的了解。那么本次作业的第一点就是针对第四次作业的完善。请根据第四次作业分析设计的结果进行编码。要求根据设计的类图进行编码,写出实现该程序所需要的类,
- 学习数据结构栈的知识。
作业要求
- 本次作业要求将程序写成.cpp和.h分离的形式
- 根据设计的类图进行编码,搭建主体框架
- 本次作业不要求实现核心的算法功能
- 发表一篇博客,博客内容为:提供本次作业的github链接,对栈的知识学习探索。
代码
在上次作业,已经实现了编码:
代码地址
- 代码结构(主体框架):
对栈的学习与探索
上次的作业,已经学习了栈的知识,并把它融入到了表达式的生成:
- 类的声明
class stack//栈
{
private:int top;
char ch[MAX];
public:void initstack(void);
void push(char *data);
char pop(void);
bool isempty(void);
stack() {};
~stack() {};
};
-成员函数
//******stack*******
void stack::initstack(void)
{
top = -1;
int i = 0;
for (i = 0; i < MAX; i++)ch[i] = NULL;
}
bool stack::isempty(void)
{
if (top == -1)return true;
else return false;
}
void stack::push(char *data)
{
int len = strlen(data),i;
top++;
if (strlen(ch)+len >= MAX)cout << "The stack is full!" << endl;
else
for (i = 0; i < len; i++) {
ch[top] = data[len - i - 1];
top++;
}
top--;
}
char stack::pop(void)
{
char temp;
if (isempty())cout << "The stack is empty!!" << endl;
else {
temp = ch[top];
ch[top] = NULL;
top--;
return temp;
}
}
栈的小结:
- 栈是一种运算受限的线性表,栈的特点是后进先出,主要的功能是进栈和出栈。
- 栈可以用链表或者数组实现,当内存足够时可以使用数组,用前先划定出一块内存来使用栈;当内存不足时可以使用链表,动态地使用内存。在这里我使用了数组。
- 用一个top来标志栈顶,进栈时top++,元素入栈,出栈时输出栈顶元素,删除元素,top--。
- 使用前先划定一个范围,过程中需要包括top是否超出所划定范围的判断。
完成体会
- 因为这次作业的大部分要求,已经在第四次作业中完成,不止完成了框架,学习了栈,代码也已经编好。所以这次将框架提取出来,查找资料深入学习了一下栈,在这里总结了一下栈的特点用法。
- 之前的代码已经分为.h和.cpp文件,为了使结构更清晰,我把主函数和成员函数也分离开来。
- 对代码做了一次更新,添加了新学的构造函数和析构函数等。