《数据结构》实验二: 线性表实验
《数据结构》实验二:???? 线性表实验 一..实验目的 ???? 巩固线性表的数据结构,学会线性表的应用。 1.回顾线性表的逻辑结构,线性表的物理存储结构和常见操作。 2.学习运用线性表的知识来解决实际问题。 3.进一步巩固程序调试方法。 4.进一步巩固模板程序设计。 二.实验时间 ?? 准备时间为第2周到第4周,具体集中实验时间为第4周第2次课。2个学时。 三..实验内容 1.建立一个N个学生成绩的顺序表,对表进行插入、删除、查找等操作。分别输出结果。 要求如下: 1)用顺序表来实现。 2)用单链表来实现。 ? 1)自定义数据结构 ? 2)自先存储结构,并设计算法。在VC中实现。 四.参考资料 ??? 实验教材P170到182. 1.用顺序表实现 头文件: # ifndef? SeqList_H # define? SeqList_H const int MaxSize=100; class SeqList { ?????? public: ????????????? SeqList(){length=0;} ????????????? SeqList(int a[],int n); ????????????? ~SeqList(){}; ????????????? int Locate(int x); ????????????? void Insert(int i,int x); ?????? ??? int Delete(int i); ????????????? void PrintList(); ?????? private: ?????? ???? int? data[MaxSize]; ????????????? int length; }; # endif 源程序: # include<iostream> using namespace std; # include"SeqList.h" SeqList::SeqList(int a[],int n) { ?????? if(n>MaxSize) throw"参数非法"; ?????? for(int i=0;i<n;i++) ????????????? data[i]=a[i]; ?????? length=n; } void SeqList::Insert(int i,int x) { ?????? if(length>=MaxSize)throw"上溢"; ?????? if(i<1||i>length+1)throw"位置非法"; ?????? for(int j=length;j>=i;j--) ????????????? data[j]=data[j-1]; ?????? data[i-1]=x; ?????? length++; } int SeqList::Delete(int i) { ?????? if(length==0)throw"下溢"; ?????? if(i<1||i>length)throw"位置非法"; ?????? int x=data[i-1]; ?????? for(int j=i;j<length;j++) ????????????? data[j-1]=data[j]; ?????? length--; ?????? return x; } int SeqList::Locate(int x) { ?????? for(int i=0;i<length;i++) ????????????? if(data[i]==x) return i+1; ????????????? return 0; }; void SeqList::PrintList() { for (int i=0;i<lengeh;i++) ?cout<<data[i]<<” “; cout<<endl; } void main() { ?????? int r[3]={96,82,83?? }; ?????? SeqList L(r,3); ?????? cout<<"该学生的成绩是:"<<endl; ?????? L.PrintList(); ?????? try ?????? { ????????????? L.Insert(3,3); ?????? } ?????? catch (char *s) ?????? { ????????????? cout<<s<<endl; ?????? } ?????? cout<<"插入成绩后是:"<<endl; ?????? L.PrintList(); ?????? cout<<"值为2的元素的值为:"; ?????? cout<<L.Locate(2)<<endl; ?????? cout<<"删除前的成绩为:"<<endl; ?????? L.PrintList(); ??? try ?????? { ????????????? L.Delete(1); ?????? } ?????? catch(char *s) ?????? { ????????????? cout<<s<<endl; ?????? } ?????? cout<<"删除后的数据为:"<<endl; ?????? L.PrintList(); } 2.单链表实现 头文件: # ifndef LinkList_H # define LinkList_H template<class DataType> struct Node { ?????? DataType data; ?????? Node<DataType>*next; }; template<class DataType> class LinkList { ?????? public: ????????????? LinkList(); ????????????? LinkList(DataType a[],int n); ????????????? ~LinkList(); ????????????? int Locate(DataType x); ????????????? void Insert(int i,DataType x); ????????????? DataType Delete(int i); ????????????? void PrintList(); ?????? private: ????????????? Node<DataType>*first; }; # endif 源程序: # include<iostream> using namespace std; # include"LinkList.h" template<class DataType> LinkList<DataType>::LinkList() { ?????? first=new Node<DataType>; ?????? first->next=NULL; } template<class DataType> LinkList<DataType>::LinkList(DataType a[],int n) { ?????? Node<DataType>*r,*s; ?????? first=new Node<DataType>; ?????? r=first; ?????? for(int i=0;i<n;i++) ?????? { ????????????? s=new Node<DataType>; ????????????? s->data=a[i]; ????????????? r->next=s;r=s; ?????? } ?????? r->next=NULL; } template<class DataType> LinkList<DataType>::~LinkList() { ?????? Node<DataType>*q=NULL; ?????? while(first!=NULL) ?????? { ????????????? q=first; ????????????? first=first->next; ????????????? delete q; ?????? } } template<class DataType> void LinkList<DataType>::Insert(int i,DataType x) { ?????? Node <DataType>*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<DataType>;s->data=x; ????????????? s->next=p->next;p->next=s; ?????? } } template<class DataType> DataType LinkList<DataType>::Delete(int i) { ?????? Node<DataType>*p=first,*q=NULL; ?????? DataType 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 DataType> int LinkList<DataType>::Locate(DataType x) { ?????? Node<DataType>*p=first->next; ?????? int count=1; ?????? while (p!=NULL) ?????? { ????????????? if (p->data==x)return count; ????????????? p=p->next; ????????????? count++; ?????? } ?????? return 0; } template<class DataType> void LinkList<DataType>::PrintList() { ?????? Node<DataType>*p=first->next; ?????? while(p!=NULL) ?????? { ????????????? cout<<p->data<<" "; ????????????? p=p->next; ?????? } ?????? cout<<endl; } void main() { ?????? int r[3]={88,85,96}; ?????? LinkList<int>L(r,3); ?????? cout<<"该学生的成绩时是:"<<endl; ?????? L.PrintList(); ?????? try ?????? { ????????????? L.Insert(88,3); ?????? } ?????? catch(char*s) ?????? { ????????????? cout<<s<<endl; ?????? } ?????? cout<<"插入后的成绩为:"<<endl; ?????? L.PrintList(); ?????? cout<<"成绩为85的学生是:"; ?????? cout<<L.Locate(85)<<endl; ?????? cout<<"删除前的成绩是:"<<endl; ?????? L.PrintList(); ?????? try ?????? { ????????????? L.Delete(2); ?????? } ?????? catch(char*s) ?????? { ????????????? cout<<s<<endl; ?????? } ?????? cout<<"删除后的成绩是:"<<endl; ?????? L.PrintList(); }(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |