作业:
使用C++手动封装一个顺序表,包含成员指针变量,成员变量N个
#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);//访问容器中任意一个元素 atdatatype & at(int index);//君子函数:二倍扩容void expend();//释放顺序表void seqfree(); };#endif // SEQLIST_H
#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"; }
#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; }
思维导图: