作业:
使用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
相关推荐
咔咔咔的10 分钟前
3652. 按策略买卖股票的最佳时机59803541517 分钟前
【java工具类】小数、整数转中文大写JIngJaneIL25 分钟前
基于java + vue个人博客系统(源码+数据库+文档)某林21233 分钟前
基于SLAM Toolbox的移动机器人激光建图算法原理与工程实现吃喝不愁霸王餐APP开发者35 分钟前
Java后端服务在对接全国性霸王餐API时的多数据中心部署与就近调用策略froginwe111 小时前
jQuery UI 实例修炼地1 小时前
代码随想录算法训练营第四十三天 | 图论理论基础、深搜理论基础、卡码网98. 所有可达路径、797. 所有可能的路径、广搜理论基础iAkuya1 小时前
(leetcode)力扣100 23反转链表(迭代||递归)这周也會开心1 小时前
128陷阱,==与equals区别剪一朵云爱着1 小时前
PAT 1095 Cars on Campus
