数据结构:实验二线性表综合实验②单链表

来源:互联网 发布:java软件设计什么 编辑:程序博客网 时间:2024/06/04 19:24

一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。

二.实验内容
通过单链表建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。

三.实验报告
1.实验代码如下:

#include<iostream>  using namespace std;template <typename T>struct Node{    T data;    Node<T> *next;};template <typename T>class LinkList {public:    LinkList(); //无参构造函数,建立只有头结点的空链表      LinkList(T score[], int n);    //构造函数      ~LinkList()                 //析构函数      {        Node<T> *q;        while (first != NULL)        {            q = first;            first = first->next;            delete q;        }    }    void insert(int i, T x); //插入操作,在位置i插入元素x      T Delete(int i);//删除操作,删除位置i的元素      T get(int i);//按位查找      int locate(T x); //按值查找      void print();//输出操作  private:    Node<T> *first; //头指针    };template<class T>LinkList<T>::LinkList(){    first = new Node<T>;    first->next = NULL;}template<typename T>LinkList<T>::LinkList(T score[], int n){    Node<T>*s;    first = new Node<T>; first->next = NULL; //初始化一个空链表      for (int i = n-1; i>=0; i--)    {        s = new Node<T>; s->data = score[i];  //为每个数组元素建立一个结点          s->next = first->next; first->next = s;  //将结点s插入头结点之后      }}template<typename T>void LinkList<T>::insert(int i, T x){    Node<T>*p, *s; int count;    p = first; count = 0;    while (p != NULL&&count<i - 1)    {        p = p->next;        count++;    }    if (p == NULL)throw"位置非法";    else {        s = new Node<T>; s->data = x;        s->next = p->next; p->next = s;    }}template<typename T>T LinkList<T>::Delete(int i){    Node<T> *q, *p; T x; int count;    p = first; count = 0; //注意P指针要指向头结点      while (p != NULL&&count<i - 1)   //此操作目的是找到i-1个结点      {        p = p->next;        count++;    }    if (p == NULL || p->next == NULL)throw"位置";  //结点p不存在或p后继结点不存在      else {        q = p->next; x = q->data;  //暂存被删结点          p->next = q->next;        delete q;        return x;    }}template<typename T>T LinkList<T>::get(int i){    Node<T>*p; int count;    p = first->next; count = 1;    while (p != NULL&&count<i)    {        p = p->next; count++;    }    if (p == NULL)throw"位置非法";    else return p->data;}template<typename T>int LinkList<T>::locate(T x){    Node<T>*p; int count;    p = first->next; count = 1;    while (p != NULL)    {        if (p->data == x)return count;        p = p->next;        count++;    }    return count;}template<typename T>void LinkList<T>::print(){    Node<T>*p;    p = first->next;    while (p != NULL)    {        cout << p->data << "  ";;        p = p->next;    }}void main(){    int score[5] = {66,71,68,45,93};    LinkList<int>student(score,5);    cout<< "学生成绩:" ;    student.print();    cout<<endl<<"在位置3插入成绩63,结果如下:" ;    student.insert(3, 63);    student.print();    cout<<endl<< "在位置2删除成绩为:"<< student.Delete(2);    cout<<endl<< "删除后结果如下:" ;    student.print();    cout <<endl<< "位置3的成绩为:"<< student.get(3);    cout <<endl<< "成绩68所在位置为:"<< student.locate(68);}

2.实验结果
这里写图片描述

四.实验总结
通过单链表建立一个由5个学生成绩的顺序表,学生成绩分别为66, 71, 68, 45, 93 ,对表在位置2插入63,插入后学生成绩为66, 63,71, 68, 45, 93 ,删除位置3的成绩71,删除后为66, 63, 68, 45, 93 .

原创粉丝点击