实验二 静态链表实现学生成绩

来源:互联网 发布:python简明教程pdf版 编辑:程序博客网 时间:2024/04/28 13:08


源代码
#includeusing namespace std;const int MaxSize = 100;     //自定义表长templateclass Node {public:    T data;    int next;      //存储指向下一个节点的数组的下标};templateclass staticLink {public:staticLink();    staticLink(T a[],int n);    ~staticLink(){};    int Length(){return length;}   //返回单链表的长度    T Get(int i);                  //按位查找,查找第i个节点的元素    int Locate(T x);               //按值查找,查找链表中第一个值为x的元素,并返回序号    bool Insert(int i, T x);       //插入元素,在第i个位置插入值x    bool Delete(int i);            //删除节点,删除第i个节点    void PrintList();              //遍历节点private:    int first;    int avail;    int length;    Node SList[MaxSize];};templatestaticLink::staticLink() {first=0;avail=1;sList[0].next=-1;for(int i=1;istaticLink::staticLink(T a[],int n) {    for (int i = 0; i < MaxSize; i++)    {        SList[i].next =i+1;    }    length = 0;    SList[MaxSize-1].next=-1;    avail = 2;    first = 1;    SList[first].next = -1;            //利用头插法插入元素    for (int j = 0; j < n;j++)         //判断链中是否已满    {        if (avail==-1) {               break;        }        int s = avail;                    //空链后移        avail = SList[avail].next;        //新链上值        SList[s].data = a[j];             //上链        SList[s].next = SList[first].next;        SList[first].next = s;        length++;    }}templateT staticLink::Get(int i) {    if (i <= 0 || i > length) {        throw"location error";    }    int s = first;    for (int j = 0; j < i; j++) {        s = SList[s].next;    }    return SList[s].data;}templateint staticLink::Locate(T x) {    int count = 0;    int s = first;    while (countbool staticLink::Insert(int i, T x) {    if (SList[avail].next==-1) {        return false;    }    int s = first;    int temp = avail;    SList[temp].data = x;            //空链头针后移    avail = SList[avail].next;    int count=0;    while (count < i-1 && count < length) {        s = SList[s].next;        count++;    }    SList[temp].next = SList[s].next;    SList[s].next = temp;    length++;    return true;}templatebool staticLink::Delete(int i) {    if (i <= 0 || i > length) {        return false;    }    int count = 0;    int s = first;    while (count < i-1 && count < length) {        s = SList[s].next;        count++;    }    int q = SList[s].next;    SList[s].next = SList[q].next;    SList[q].next = avail;    avail = q;    length--;    return true;}templatevoid staticLink::PrintList() {    int s = SList[first].next;    for (int i = 1; i <= length; i++) {        cout << SList[s].data << " ";        s = SList[s].next;    }}int main() {cout<<"\t ****************学生成绩静态链表的实现**************\n";cout<<"\t ****************************************************\n";cout<<"\t *------------------------------------------*********\n";cout<<"\t *****************[1]——输出表长********************\n";cout<<"\t *****************[2]——按位查找********************\n";cout<<"\t *****************[3]——按值查找********************\n";cout<<"\t *****************[4]——插入************************\n";cout<<"\t *****************[5]——删除************************\n";cout<<"\t *****************[6]——遍历************************\n";cout<<"\t *****************[7]——输出主菜单******************\n";cout<<"\t *****************[8]——退出************************\n";cout<<"\t *------------------------------------------*********\n";cout<<"\t ****************************************************\n";int a[8] = {78,87,89,82,80,91,98,94 };staticLink  sList(a, 8);int flag,i,x,t;flag=0;while(flag==0){cout<<"please input the command(1~8):"<>t;switch(t){case 1:cout<<"the length is:"<>i;x=sList.Get(i);cout<<"the number is:"<>x;i=sList.Locate(x);cout<<"the location is:"<>i;cout<<"the insert number is:";cin>>x;sList.Insert(i,x);cout<<"insert successfully!"<>i;sList.Delete(i);cout<<"delete successfully!"<

运行结果
运行程序,进入主界面

输入1,输出表长

输入6,输出静态链表

输入2,查找第四个位置的成绩

输入3,查找成绩87所在的位置

输入4,在第四个位置插入成绩90

输入5,删除第八个位置的成绩