数据结构上机作业2

数据结构上机作业2
2.2

#include <iostream>
using namespace std;
template <class T>
class List
{
 void Clear(); //置空线性表
 bool IsEmpty(); //线性表为空时,返回true
 bool Append(const T value); //在表尾添加元素value,表的长度增加1
 bool Insert(const int p, const T value); //在位置p插入元素value,  表的长度增加1
 bool Delete(const int p); //删除位置p上的元素,表的长度减1
 bool GetValue(const int p, T& value); //把位置p上的元素值返回到变量value中
 bool SetValue(const int p, const T value); //把位置p的元素值修改为value
 bool GetPos(int &p, const T value); //把值为value的元素的位置返回到变量p中
};

2.3

template <class T> //线性表的元素类型为T
class ArrayList : public List<T> //定义顺序表ArrayList
{
 public: //顺序表的运算集
  ArrayList(const int size) //创建顺序表,表长为最大长度
  {
      if(size < 1){ //llz
                cout << "Size must be greater than 0";
                throw -1;
      }
   maxSize = size;
   arrayList = new T[maxSize];
   curLen = 0;
   position = 0;
  }
  ~ArrayList() //析构函数,消除ArrayList的实例
  {
   delete [] arrayList;
  }
  void clear() //清空顺序表
  {
   delete [] arrayList;
   curLen = 0;
   position = 0;
   arrayList = new T[maxSize];
  }
  int Length(); //返回顺序表长度,llz
  bool Append(const T value); //在表尾添加元素value,表的长度增加1
  bool Insert(const int p, const T value); //在位置p插入元素value,表的长度增加1
  bool Delete(const int p); //删除位置p上的元素,表的长度减1
  bool GetValue(const int p, T& value); //把位置p上的元素值返回到变量value中
  bool SetValue(const int p, const T value); //把位置p的元素值修改为value
  bool GetPos(int &p, const T value); //把值为value的元素的位置返回到变量p中
 private: //私有变量
  T *arrayList; //存储顺序表的实例
  int maxSize; //顺序表实例的最大长度
  int curLen; //顺序表实例的当前长度
  int position; //当前处理位置
};
template<class T>
int ArrayList<T> :: Length(){ //返回Arraylist长度
    return curLen;
}
template<class T>
bool ArrayList<T> :: GetValue(const int p, T& value){
    if(p < 0 || p > curLen)
    {
        cout << "GetValue position is illegal" << endl;
        return false;
    }
    value = arrayList[p];
}

2.4

template <class T> //顺序表的元素类型为T
bool ArrayList<T> :: Insert(const int p, const T value)
{
 if(curLen >= maxSize) //检查顺序表是否溢出
 {
  cout << "The List is overflow" << endl;
  return false;
 }
 if(p < 0 || p > curLen) //检查插入位置是否合法
 {
  cout << "Insertion point is illegal" << endl;
        return false; //llz
 }
 for(int i = curLen; i > p; i--)
 {
  arrayList[i] = arrayList[i-1]; //从表尾curLen-1处向后移动一个位置直到插入位置p
 }
 arrayList[p] = value; //位置p处插入新元素
 curLen++; //表的实际长度增加1
 return true;
}

2.5

template <class T> //顺序表的元素类型为T
bool ArrayList<T> :: Delete(const int p)
{
 if(curLen <= 0) //检查顺序表是否为空
 {
  cout << "No element to delete" << endl;
  return false;
 }
 if(p < 0 || p > curLen -1) //检查删除位置的合法性
 {
  cout << "Deletion is illegal" << endl;
  return false;
 }
 for(int i = p; i < curLen - 1; i++)
 {
  arrayList[i] = arrayList[i+1]; //从删除位置p开始每个元素向前移动一个位置直到表尾
 }
 curLen--; //表的实际长度减1
 return true;
}

Test Class

class Student{
    private:
        int id;
        string name;
    public:
        Student(){
        }
        Student(int id, string name){
            this->id = id;
            this->name = name;
        }
        int getId(){
            return this->id;
        }
        void setId(int id){
            this->id = id;
        }
        string getName(){
            return this->name;
        }
        void setName(string name){
            this->name = name;
        }
        friend ostream & operator<<(ostream &out, Student &obj){
            cout << "id: " << obj.id << " ,name: " << obj.name << endl;
            return out;
        }
}

Test main()

int main(){
    Student s[5] = {Student(1, "zhangsan"), Student(2, "lisi"),
                    Student(3, "zhaowu"), Student(4, "wangliu"), Student(5, "wuqi")};
    try{
        ArrayList<Student> l(10);
        l.Insert(0, s[0]);
        l.Insert(1, s[1]);
        l.Insert(2, s[2]);
        l.Delete(1);
        for(int i = 0; i < l.Length(); i++){
            Student stu;
            l.GetValue(i, stu);
            cout << stu;
        }
    }catch(int e){
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验1: 1)熟悉Vc 6.0环境 2)用两种算法实现1-1/x+1/x*x-1/x*x*x+1/x*x*x*x…., 注(algo1-1,algo1-2) 实验2:线性表 1) 顺序表的合并:实现书中P26中算法2.7,La=1 2 3 4 5, Lb=2 4 6 8 10。要求得到合并后的Lc=1 2 3 4 5 6 8 10 注(algo2-4 ) 2) 一元多项式加法:Pa=Pa+Pb,并销毁一元多项式Pb 3) 一元多项式乘法:Pa=Pa*Pb,并销毁一元多项式Pb 实验3:栈和队列 1) 利用栈求解迷宫问;行列各为10(包括外墙),迷宫内墙单元数为18。 2) 利用栈和递归求解Hanoi塔问,圆盘数3。 3) 利用非循环顺序队列采用广度搜索法求解迷宫问(一条路径);行列各为5(包括外墙),迷宫内墙单元数为2。 实验4:串 1) 模式匹配改进算法:KMP算法,实现书中4.6,4.7,4.8算法。 实验5: 数组和广义表 1) 求稀疏矩阵的加,乘和转置矩阵。 2) 求广义表的深度。 实验6:树和二叉树 1) 求赫夫曼编码。(w存放n个字符的权值(均>0),构造赫夫曼树HT,并求出n个字符的赫夫曼编码HC) 实验7:图 1)实现教科书中图7.33的程序,并能求出任意两点的最短路径。 实验8:动态存储管理 1) 边界标识法,程序实现教科书中算法8.1 2) 伙伴系统,程序实现教科书中算法8.2 实验9:查找 1) 哈希表的查找及其分析:以书中图9-25为例。 实验10:内部排序 1) 以书中10-4的数据,程序实现直接插入排序,折半排序和2路插入排序。 2) 以书中图10.6的数据,程序实现快速排序。 3) 以书中图10.9的数据,程序实现树形选择排序。 4) 以书中图10.13的数据,程序实现归并排序。 5) 以书中图10.14的数据,程序实现链式基数排序。 实验11: 外部排序 1) 以书中图11.4的数据,程序实现多路平衡归并排序。 2)以书中图11.5的数据,程序实现置换-选择排序。 实验12:文件 1)以书中图12.4的数据,程序实现顺序文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值