作业:
使用C++手动封装一个顺序表,包含成员指针变量,成员变量N个
cpp#ifndef SEQLIST_H #define SEQLIST_H #include <iostream> using namespace std; using datatype = int; class Seqlist { private: datatype * data; int size = 0; int len = 0; public: //无参构造 Seqlist(); //有参构造 Seqlist(int s); //要实现的函数 //判空函数 bool empty(); //判满函数 bool full(); //添加数据函数 bool add(datatype e); //求当前顺序表的实际长度 int length(); //求当前顺序表的容量 int si(); //任意位置插入函数 bool insert_pos(int pos,datatype e); //任意位置删除函数 bool delete_pos(int pos); //访问容器中任意一个元素 at datatype & at(int index); //君子函数:二倍扩容 void expend(); //释放顺序表 void seqfree(); }; #endif // SEQLIST_H
cpp#include "seqlist.h" //无参构造 Seqlist::Seqlist():data(new datatype[10]),size(10),len(0) { cout<<"创建了一个大小为10的顺序表\n"; } //有参构造 Seqlist::Seqlist(int s):data(new datatype[s]),size(s),len(0) { cout<<"创建了一个大小为"<<s<<"的顺序表\n"; } //要实现的函数 //判空函数 bool Seqlist::empty() { if(len == 0) { return 1; } return 0; } //判满函数 bool Seqlist::full() { if(len == size) { return 1; } return 0; } //添加数据函数 bool Seqlist::add(datatype e) { if(full()) { cout<<"数据添加失败\n"; return 0; } data[len] = e; len++; cout<<"数据添加成功\n"; return 1; } //求当前顺序表的实际长度 int Seqlist::length() { return len; } //求当前顺序表的容量 int Seqlist::si() { return size; } //任意位置插入函数 bool Seqlist::insert_pos(int pos,datatype e) { if(full() || pos<0 || pos>size) { cout<<"数据插入失败\n"; return 0; } for(int i=len;i>pos;i--) { data[i] = data[i-1]; } data[pos] = e; len++; cout<<"数据插入成功\n"; return 1; } //任意位置删除函数 bool Seqlist::delete_pos(int pos) { if(empty() || pos<0 || pos>size) { cout<<"数据删除失败\n"; return 0; } for(int i=pos;i<len;i++) { data[i] = data[i+1]; } len--; cout<<"数据删除成功\n"; return 1; } //访问容器中任意一个元素 at datatype & Seqlist::at(int index) { if(empty() || index<0 || index>size) { cout<<"数据访问失败\n"; return data[0]; } cout<<data[index]; return data[index]; } //君子函数:二倍扩容 void Seqlist::expend() { if(empty()) { cout<<"顺序表扩容失败\n"; return; } datatype * newdata = new datatype[size*2]; for(int i=0;i<len;i++) { newdata[i] = data[i]; } size *= 2; delete []data; data = newdata; cout<<"顺序表二倍扩容成功\n"; } //释放顺序表 void Seqlist::seqfree() { delete []data; data = NULL; cout<<"顺序表释放成功\n"; }
cpp#include "seqlist.h" int main() { Seqlist stu(50); stu.add(89); stu.add(98); stu.add(94); stu.add(73); stu.insert_pos(2,78); stu.delete_pos(1); stu.insert_pos(0,66); cout<<"当前顺序表长度为"<<stu.length()<<endl; cout<<"当前顺序表值分别为:\n"; for(int i=0;i<stu.length();i++) { stu.at(i); cout<<'\t'; } cout<<endl; cout<<"当前顺序表容量为"<<stu.si()<<endl; stu.expend(); cout<<"当前顺序表容量为"<<stu.si()<<endl; cout<<"当前顺序表值分别为:\n"; for(int i=0;i<stu.length();i++) { stu.at(i); cout<<'\t'; } cout<<endl; stu.seqfree(); return 0; }
思维导图:
第二章:面向对象之封装(一)
水水阿水水2025-01-10 11:24
相关推荐
sel_915 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆Asize16 小时前
438. 找到字符串中所有字母异位词Asize16 小时前
283. 移动零布莱克60516 小时前
软中断和硬中断的区别whcyhhh16 小时前
头歌实践教学平台:数据科学与大数据技术导论(十二)lzhdim17 小时前
13、JavaScript事件循环机制 - JavaScript学习系列文章zbyyd17 小时前
Linux 多线程:互斥锁 &; 信号量船厂电气自动化ai大模型18 小时前
AI大模型与数学·第57课 傅里叶全套工具链综合实战:串联级数/连续变换/DFT/FFT,图像、音频、扩散模型完整例题wuyk55518 小时前
从零吃透Modbus通信|第3章:STM32 Modbus RTU主机人工智能培训18 小时前
人工智能数据安全下的个人信息保护实践方案
