实验一、 1.建立一个头文件sqstack.h,存放顺序栈的结构体定义,基本操作函数。 2.建立一个c/c++源文件,完成书上实验1(P117)的要求。前面要包含头文件sqstack .h, 调用里面
时间: 2024-12-17 19:35:21 浏览: 41
实验一的目标是创建一个简单的顺序栈(也称为线性栈)数据结构,它主要用于存储和管理元素按先进先出(FIFO)的原则进行添加和删除。以下是实验的主要步骤:
- 构建头文件 (
sqstack.h
): 在这个文件中,你会定义一个名为SqStack
的结构体,它通常包括两个部分:一个用于存储栈元素的数组(动态大小),以及指向栈顶元素的指针。此外,需要声明一些基本的操作函数,比如初始化(清空栈)、入栈(push)、出栈(pop)、检查栈是否为空(isEmpty)、查看栈顶元素(top)等。
// sqstack.h
#ifndef SQSTACK_H
#define SQSTACK_H
#include <iostream>
struct SqStack {
int* data;
int top; // 栈顶指针
int size;
public:
// 构造函数和析构函数
SqStack(int capacity);
~SqStack();
// 入栈操作
void push(int value);
// 出栈操作
int pop();
// 检查栈是否为空
bool isEmpty() const;
// 查看栈顶元素但不移除
int peek() const;
// 显示栈的内容
void display();
};
#endif // SQSTACK_H
- 编写源文件 (例如
sqstack.cpp
): 这里会实现上面头文件中声明的所有函数。比如,push()
方法会将新元素加到栈顶,pop()
则会在弹出栈顶元素的同时更新栈顶指针;isEmpty()
通过比较top
和size
来判断栈是否为空;peek()
则是获取栈顶元素值但不改变状态。
// sqstack.cpp
#include "sqstack.h"
// 施工函数和析构函数
SqStack::SqStack(int capacity) : data(new int[capacity]), top(0), size(capacity) {}
SqStack::~SqStack() { delete[] data; }
// 具体操作函数的实现
void SqStack::push(int value) {
if (top == size) {
std::cout << "Stack overflow!" << std::endl;
return;
}
data[top++] = value;
}
int SqStack::pop() {
if (isEmpty()) {
std::cout << "Stack underflow!" << std::endl;
return -1; // 返回错误代码或其他处理方式
}
return data[top--];
}
bool SqStack::isEmpty() const {
return top == 0;
}
int SqStack::peek() const {
if (isEmpty()) {
std::cout << "Stack is empty!" << std::endl;
return -1; // 或者抛异常
}
return data[top];
}
void SqStack::display() {
if (isEmpty()) {
std::cout << "Stack is empty." << std::endl;
} else {
for (int i = 0; i <= top; ++i) {
std::cout << "Top element: " << data[i] << std::endl;
}
}
}