《数据结构》实验二 线性表的实验(2)
发布时间:2021-05-25 01:04 所属栏目:53 来源:网络整理
导读:头文件 templateclass Tstruct jied{T data;jiedT *next;};templateclass Tclass Linklist{public:Linklist();Linklist(T a[],int n);~Linklist();int Length();void add(int i,T x);T shanc(int i);T chaz1(int i)
头文件 template<class T> struct jied { T data; jied<T> *next; }; template<class T> class Linklist { public: Linklist(); Linklist(T a[],int n); ~Linklist(); int Length(); void add(int i,T x); T shanc(int i); T chaz1(int i); int chaz2(T x); void shuc(); private: jied<T> *first; };
#include "dlb1.h" template<class T> Linklist<T>::Linklist() { first=new jied<T>; first->next=NULL; } template<class T> Linklist<T>::Linklist(T a[],int n) { int i; jied<T> *w,*j; first=new jied<T>; w=first; for(i=0;i<n;i++) { j=new jied<T>; j->data=a[i]; w->next=j; w=j; } w->next=NULL; } template<class T> Linklist<T>::~Linklist() { jied<T> *p; while(first!=NULL) { p=first; first=first->next; delete p; } } template<class T> int Linklist<T>::Length() { jied<T> *p; int count; p=first->next; count=0; while(p!=NULL) { p=p->next; count++; } return count; } template<class T> void Linklist<T>::add(int i,T x) { jied<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 jied<T>; s->data=x; s->next=p->next; p->next=s; } } template<class T> T Linklist<T>::shanc(int i) { jied<T> *p,*r; T x; int count; p=first; count=0; while(p!=NULL && count<i-1) { p=p->next; count++; } if(p==NULL || p->next==NULL)throw"位置错误"; else { r=p->next; x=r->data; p->next=r->next; delete r; return x; } } template<class T> T Linklist<T>::chaz1(int i) { jied<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<class T> int Linklist<T>::chaz2(T x) { jied<T> *p; int count; p=first->next; count=1; while(p!=NULL) { if(p->data==x) return count; p=p->next; count++; } return 0; } template<class T> void Linklist<T>::shuc() { jied<T> *p; p=first->next; while(p!=NULL) { cout<<p->data<<setw(5); p=p->next; } cout<<endl; }
#include<iomanip> #include<iostream> #include "dlb2.cpp" using namespace std; void main() { int score[5]={60,70,80,90,100}; float average=0.0; Linklist<int> g(score,5); cout<<"插入数据前的成绩为:"<<endl; g.shuc(); average=(60+70+80+90+100)/5.0; cout<<"插入数据前成绩的平均分为:"<<average<<endl; try { g.add(4,95); } catch(char *a) { cout<<a<<endl; } cout<<"插入数据后的成绩为:"<<endl; g.shuc(); cout<<"成绩为60的位置为:"; cout<<g.chaz2(60)<<endl; cout<<"删除第三个数据前的成绩为:"<<endl; g.shuc(); try { g.shanc(3); } catch(char *a) { cout<<a<<endl; } cout<<"删除数据后的成绩为:"<<endl; g.shuc(); }
? ?比较总结线性表的两种主要存储结果 (1)顺序表 系统给顺序表分配的空间的一定的,我们在这一定的空间内对数据进行操作,就算删除了一些数据,线性表所占空间的长度还是没有改变的。 (2)单链表 系统给单链表分配的空间是不定的,需要插入一个数据时,系统就会分配一个空间给单链表,不需要时就释放空间,所以单链表的空间长度比较灵活。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读