1.头文件
手动封装一个顺序表(SeqList),分文件编译实现
有私有成员:顺序表数组的起始地址 ptr、 顺序表的总长度:size、顺序表的实际长度:len
成员函数:初始化 init(int n)
判空:empty
判满:full
尾插:push_back
插入:insert(int index)
任意位置删除:erase(int index)
尾删: pop_back
求长度:size()
获取任意位置元素:& at(int inex)
将顺序表进行排序:sort(bool flag) //flag 为真,表示升序,否则是降序
#include <iostream>
#include<memory.h>
#include<stdlib.h>
#include<string.h>
using namespace std;
//typedef int datatype; //类型重命名
using datatype = int;
//封装一个顺序表
class SeqList
{
private:
datatype *ptr; //指向堆区空间的起始地址
int size; //总长度
int len = 0; //当前顺序表实际长度
public:
void init(int n)
{
//在堆区申请出一个长度为n的空间,将其实地址赋值给ptr
this->ptr = new datatype[n];
//给len进行初始化
this->len = 0;
this->size = n;
}
//判空
bool empty()
{
return this->len == 0;
}
//判满
bool full()
{
return this->len == this->size;
}
//尾插
void push_back(datatype e)
{
//判断是否满了
if(this->full())
{
return ;
}
this->ptr[len++] = e;
}
//定义展示函数
void show()
{
//判空
cout<<"当前顺序表中的元素分别是:";
for(int i=0; i<this->len; i++)
{
cout<<this->ptr[i]<<" ";
}
cout<<endl;
}
};
int main()
{
SeqList sl; //实例化一个顺序表对象
sl.init(5); //申请空间
sl.push_back(1);
sl.push_back(3);
sl.push_back(5);
sl.show();
return 0;
}
2.源文件
#include "SeqList.h"
#include <algorithm> // 用于std::swap
SeqList::SeqList() {
this->ptr = nullptr;
this->size = 0;
this->len = 0;
}
SeqList::~SeqList() {
delete[] this->ptr;
}
void SeqList::init(int n) {
this->ptr = new datatype[n];
this->len = 0;
this->size = n;
}
bool SeqList::empty() {
return this->len == 0;
}
bool SeqList::full() {
return this->len == this->size;
}
void SeqList::push_back(datatype e) {
if (full()) {
return;
}
this->ptr[len++] = e;
}
void SeqList::insert(int index, datatype e) {
if (index < 0 || index > len || full()) {
return;
}
for (int i = len; i > index; i--) {
ptr[i] = ptr[i - 1];
}
ptr[index] = e;
len++;
}
void SeqList::erase(int index) {
if (index < 0 || index >= len) {
return;
}
for (int i = index; i < len - 1; i++) {
ptr[i] = ptr[i + 1];
}
len--;
}
void SeqList::pop_back() {
if (!empty()) {
len--;
}
}
int SeqList::size() {
return len;
}
datatype& SeqList::at(int index) {
if (index < 0 || index >= len) {
throw out_of_range("Index out of range");
}
return ptr[index];
}
void SeqList::sort(bool flag) {
if (flag) { // 升序
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (ptr[j] > ptr[j + 1]) {
swap(ptr[j], ptr[j + 1]);
}
}
}
} else { // 降序
for (int i = 0; i < len - 1; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (ptr[j] < ptr[j + 1]) {
swap(ptr[j], ptr[j + 1]);
}
}
}
}
}
void SeqList::show() {
if (empty()) {
cout << "顺序表为空" << endl;
return;
}
cout << "当前顺序表中的元素分别是:";
for (int i = 0; i < len; i++) {
cout << ptr[i] << " ";
}
cout << endl;
}
3.主程序文件
#include "SeqList.h"
int main() {
SeqList sl; // 实例化一个顺序表对象
sl.init(5); // 申请空间
sl.push_back(1);
sl.push_back(3);
sl.push_back(5);
sl.show();
sl.insert(1, 2); // 在位置1插入元素2
sl.show();
sl.erase(2); // 删除位置2的元素
sl.show();
sl.push_back(4);
sl.push_back(6);
sl.show();
sl.pop_back(); // 尾删
sl.show();
cout << "顺序表长度:" << sl.size() << endl;
cout << "位置1的元素:" << sl.at(1) << endl;
sl.sort(true); // 升序排序
sl.show();
sl.sort(false); // 降序排序
sl.show();
return 0;
}