顺序表

要注意类中变量的初始化问题。
顺序表的搜索、插入、删除功能要首先判断操作位置的有效性。

SeqList.h

#include <iostream>
#include<string>
using namespace std;

static const int defaultSize = 100;

struct Student{
    int stuNo;
    string stuName;
    int stuGrade;
    int score;

};
template<class T>
class SeqList{

protected:
    int maxSize;
    T *data;
    int last;

public:
    SeqList(int sz = defaultSize);
    ~SeqList(){ delete[] data; }
    int Size() const{ return maxSize; };
    int Length()const{ return last + 1; };
    T getData(int i){ return i > 0 && i <= last + 1 ? data[i-1] : NULL; };   //取出第i个表项的值
    bool isFull(){ return last == maxSize - 1 ? true : false; };
    bool isEmpty(){ return last == -1 ? true : false; }
    bool Insert(int i,const T& current);      //在第i个表项处插入值为current
    bool deleteNode(int i, T& del);     //删除第i个表项,并把值保存在del中
    void output(){
        for (int i = 0; i < last; i++)
            cout << data[i].stuNo << "  "<<data[i].stuName <<"  " <<data[i].stuGrade <<"  " <<data[i].score << endl;
    };
};


template<class T>
SeqList<T>::SeqList(int sz){
    if (sz != 0){
        maxSize = sz;
        last = 0;  
        data = new T[maxSize];
        if (data == NULL){
            cout << "内存分配错误!";
            exit(1);
        }
    }
}

template<class T>
bool SeqList<T>::Insert(int i, const T& current){
    if (isFull() == true) return false;
    if (i < 0 || i >= maxSize) return false;
    for (int j = last; j >= i; j--)     //从最后一个到第i个依次往后面移一个
        data[j + 1] = data[j];
    data[i] = current;
    last += 1;  //插入元素后last所在的位置+1
    return true;

}

template<class T>
bool SeqList<T>::deleteNode(int i, T& del){

    if (isEmpty() == true) return false;
    if (i < 0 || i > maxSize) return false;
    del = data[i];
    for (int j = i; j <= last; j++)     //从i处到最后一个依次往前移一个
        data[j] = data[j + 1];
    last -= 1;
    return true;
}

Test.cpp

#include"SeqList.h"

using namespace std;

void main(){

    Student stu1;
    stu1.stuNo = 0001;
    stu1.stuName = "张三";
    stu1.stuGrade = 2005;
    stu1.score = 70;

    Student stu2;
    stu2.stuNo = 0002;
    stu2.stuName = "李四";
    stu2.stuGrade = 2004;
    stu2.score = 65;

    SeqList<Student> seqStudent;
    seqStudent.Insert(0, stu1);
    seqStudent.Insert(1, stu2);
    seqStudent.output();
    Student stu3;
    seqStudent.deleteNode(1, stu3);
    cout << stu3.stuNo << "  " << stu3.stuName << "  " << stu3.stuGrade << "  " << stu3.score << endl;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值