实验二:学生成绩之单链表操作

来源:互联网 发布:中世纪2优化9教皇国 编辑:程序博客网 时间:2024/04/28 18:00
一.实验目的
     巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二..实验内容
1.建立一个由n个学生成绩的单链表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
三. 代码实现

#include<iostream>using namespace std;template<class T>struct Node{T data;Node<T>*next; } ;  template<class T> class LinkList { public: LinkList(); LinkList(T a[],int n); ~LinkList(); int Locate(T x); void Insert(int i,T x); T Delete(int i); void PrintList(); private: Node<T>*first; };   #include<iostream> using namespace std;  template<class T> LinkList<T>::LinkList() { first=new Node<T>; first->next=NULL; }  template<class T> LinkList<T>::LinkList(T a[],int n) { Node<T>*r,*s; first=new Node<T>; r=first; for(int i=0;i<n;i++) {s=new Node<T>; s->data=a[i]; r->next=s;r=s;  }   r->next=NULL; }  template<class T> LinkList<T>::~LinkList() { Node<T>*q=NULL; while(first!=NULL) { q=first; first=first->next; delete q; }  }   template<class T>void LinkList<T>::Insert(int i,T x){Node<T>*p=first,*s=NULL;int 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<class T>T LinkList<T>::Delete(int i){Node<T>*p=first,*q=NULL;T x;int count=0;while(p!=NULL&&count<i-1){p=p->next;count++;}if(p==NULL||p->next==NULL)throw"位置";else{q=p->next;x=q->data;p->next=q->next;delete q;return x;}  }      template<class T>  int LinkList<T>::Locate(T x)  {  Node<T>*p=first->next;int count=1;  while(p!=NULL)  {  if(p->data==x)return count;  p=p->next;  count ++;  }  return 0;  }  template<class T> void LinkList<T>::PrintList() { Node<T>*p=first->next; while(p!=NULL) { cout<<p->data<<" "; p=p->next; } cout<<endl; }  int main() { int grade[9]={53,44,15,45,59,23,38,56,57}; LinkList<int>A(grade,9); cout<<"插入成绩操作前数据为:"<<endl; A.PrintList(); try { A.Insert(2,57); } catch(char*s) { cout<<s<<endl; } cout<<"插入成绩操作后数据为:"<<endl; A.PrintList(); cout<<"值为59的元素位置为:"; cout<<A.Locate(59)<<endl; cout<<"删除第一个学生成绩操作前数据为:"<<endl; A.PrintList(); try { A.Delete(1);  }   catch(char*s)  {  cout<<s<<endl;  }  cout<<"执行删除成绩操作后数据为:"<<endl;  A.PrintList();  }
四.结果


五.实验心得
先弄懂每个功能的算法,是什么意思,要是弄懂了就会容易很多了。
而且要注意小心点打代码,每次都会有很多的语法错误,这个编译系统很难找出来,而且有时候会显示出一堆的错误。
对实验还不是很熟悉,还是要多去练习吧。


原创粉丝点击