线性表综合实验之静态链表的实现
2017-10-13 23:06
585 查看
#include<iostream> using namespace std; const int Maxsize=100; template<class T> struct SNode{ T data; int next; }; template<class T> class Staticlist{ private: int first; int avail; int length; SNode<T> list[Maxsize]; public: Staticlist(); Staticlist(T a[],int n); ~Staticlist(){} int Length(){return length;} T Number_get(int i); int Location_get(T x); void Insert(int i,T x); T Delete(int i); void Printlist(); }; template<class T> Staticlist<T>::Staticlist() { first=0; avail=1; list[0].next=-1; for(int i=1;i<99;i++) list[i].next=i+1; list[99]=-1; length=0; } template<class T> Staticlist<T>::Staticlist(T a[],int n) { int s; length=0; if(n>Maxsize||n<=0) throw"错误"; for(int i=0;i<Maxsize;i++) list[i].next=i+1; list[Maxsize].next=-1; first=0; avail=1; list[first].next=-1; for(int j=0;j<n;j++) { s=avail; avail=list[avail].next; list[s].data=a[j]; list[s].next=list[first].next; list[first].next=s; length++; } } template<class T> T Staticlist<T>::Number_get(int i) { int p=first; if(i<=0||i>length) throw"错误"; for(int j=1;j<=i;j++) { if(list[p].next==-1) throw"错误"; p=list[p].next; } return list[p].data; } template<class T> int Staticlist<T>::Location_get(T x) { int p=first; int count=0; while(list[p].next!=-1) { if(list[p].data==x) {return count;} count++; p=list[p].next; } return 0; } template<class T> void Staticlist<T>::Insert(int i,T x) { if(i<0||i>Maxsize) throw"位置错误"; int p=first; int s=avail; list[s].data=x; avail=list[s].next; int count=0; while(count<i-1) { p=list[p].next; count++; } length++; list[s].next=list[p].next; list[p].next=s; } template<class T> T Staticlist<T>::Delete(int i) { if(i<0||i>length) throw"位置"; int p=first; int count=0; while(p!=-1&&count<i-1) { p=list[p].next; count++; } int q=list[p].next; int x=list[p].data; list[p].next=list[q].next; list[q].next=avail; avail=q; length--; return x; } template<class T> void Staticlist<T>::Printlist() { int p=list[first].next; while(p!=-1) { cout<<list[p].data<<" "; p=list[p].next; } } void main() { int stu[10]={90,87,95,77,80,91,74,89,92,97}; Staticlist<int> student(stu,10); cout<<"学生成绩如下:"<<endl; student.Printlist(); cout<<"学生总数为:"<<student.Length()<<endl; cout<<"查找的序号为3的学生的成绩:"<<endl; cout<<student.Number_get(3)<<endl; cout<<"成绩为90的学生序号为:"<<student.Location_get(90)<<endl; cout<<"在序号为1的学生后面插进新成绩80:"<<endl; student.Insert(1,80); student.Printlist(); cout<<endl; cout<<"删除序号为2的学生的成绩:"<<endl; student.Delete(2); student.Printlist(); }
一、实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。二、实验时间
准备时间为第3周到第4周,具体集中实验时间为第4周第24000
次课。2个学时。
三、实验内容
1 、建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。2、用双链表实现。
四、实验结果截图
相关文章推荐
- 实验二 线性表综合实验之静态链表
- javascript实现数据结构与算法系列:线性表的静态单链表存储结构
- 实验1 线性表的链表设计与实现
- 线性表综合实验之单链表的实现
- 实验二线性表综合实验-单链表
- 《数据结构》实验二:线性表综合实验——(3)双链表
- 《大话数据结构》读书笔记之线性表基本操作(静态单链表实现)
- 实验二 线性表-单链表(JavaScript实现)
- 实验二线性表综合实验-双链表
- Structure.List 线性表(包含顺序链表,单链表,双链表,双向循环链表的实现)
- 实验一、线性表的基本操作及实现
- c#之线性表(单链表)实现(第四季)
- 数据结构之线性结构-队列结构(静态队列的实现)
- 线性顺序链表简单实现
- 线性表 (单链表、循环链表-python实现)
- 静态双向链表的多数组实现
- 线性表综合实验之顺序表
- 数据结构之线性表4单链表(静态单链表)
- 【线性表3】线性表的链式实现:单链表
- C++语言实现线性表之链表实例