循环双链表的基本操作实现
2017-10-10 23:57
274 查看
一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
三.实验程序实现如下
四.实验结果的截图
五.实验心得与不足
(1)双链表的求长度和遍历操作的临界条件稍有变化,查找操作等也是具体问题具体分析,需要细心耐心地对待。
(2)循环双链表检索和遍历数据操作更加灵活,又因其对称结构,使之插入和删除操作都变得更容易,大大减小了时间复杂度。
(3)这次实验我了解到算法操作的一些“临界”条件的重要性,这也是我现在努力克服的一个难关,希望以后自己能多多增强逻辑思维能力。
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
二.实验内容
1.建立一个由n个学生成绩的顺序表,n的大小由自己确定,每一个学生的成绩信息由自己确定,实现数据的对表进行插入、删除、查找等操作。分别输出结果。
三.实验程序实现如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #include<iostream>using namespace std;const int MaxSize=10;template<class DataType> //定义模板类SeqLIstclass SeqList{public: SeqList(){length=0;} //无参构造函数,建立空顺序表 SeqList(DataType a[],int n); //有参构造函数,建立一个长度为n的顺序表 ~SeqList(){} //析构函数为空 int Length(){return length;} //求线性表的长度 DataType Get(int i); //按位查找,在线性表中查找第i个元素 int Locate(DataType x); //按值查找,在线性表中查找值为x的元素序号 void Insert(int i,DataType x); //插入操作,在线性表中第i个位置插入为x的元素 DataType Delete(int i); // 删除操作,删除线性表的第i个元素 void PrintList(); //遍历操作,按序号依次输出各元素 private: DataType data[MaxSize]; //存放数据元素的数组 int length; //线性表的长度 };//#include <iostream>//using namespace std;//#include"SeqList.h" //顺序表有参构造函数SeqList SeqListtemplate<class DataType>SeqList<DataType>::SeqList(DataType a[],int n){ if(n>MaxSize)throw"error"; for(int i=0;i<n;i++) data[i]=a[i]; length=n;} //顺序表按值查找算法Get template<class DataType>DataType SeqList<DataType>::Get(int i){ if(i<1 && i>length)throw"查找位置非法"; else return data[i-1];}//顺序表按位查找算法Locate//记得删除掉这些算法 template<class DataType>int SeqList<DataType>::Locate(DataType x){ for(int i=0;i<length;i++) if(data[i]==x) return i+1; //下表为1的元素等于i,返回其序号i+1; return 0; //退出循环,说明查找失败 } //顺序表插入算法Inserttemplate<class DataType>void SeqList<DataType>::Insert(int i,DataType x){ if(length>=MaxSize)throw"上溢"; if(i<1||i>length+1)throw"插入位置非法"; for(int j=length;j>=i;j--) data[j]=data[j-1]; //第j个元素存在于数组下标为j-1处 data[i-1]=x; length++; }//顺序表删除算法Deletetemplate<class DataType> DataType SeqList<DataType>::Delete(int i) { if(length==0)throw"下溢"; if(i<1||i>length)throw"查找位置非法"; DataType x=data[i-1]; //取出位置i的元素 for(int j=i;j<length;j++) data[j-1]=data[j]; //此处j已经是元素所在的数组下标 length--; return x; } //顺序表遍历算法PrintLIsttemplate<class DataType> void SeqList<DataType>::PrintList(){ for(int i=0;i<length;i++) cout<<data[i]; //依次输出线性表的元素值} /* run this program using the console pauser or add your own getch, system("pause") or input loop */#include<iostream>using namespace std; int main(){ int score[5]={1 ,2 ,3 ,4 ,5}; SeqList<int>ScoreList(score,5); cout<<"执行插入操作前的数据为:"<<endl; ScoreList.PrintList(); try { ScoreList.Insert(2 ,63); } catch(char *s) { cout<<s<<endl; } cout<<'\n'<<"执行插入操作后的数据为:"<<endl; ScoreList.PrintList(); cout<<'\n'<<"值为3 的元素位置为:"<<endl; cout<<'\n'<<ScoreList.Locate(63)<<endl; cout<<'\n'<<"执行删除第1个元素操作,删除前数据为:"<<endl; ScoreList.PrintList(); try { ScoreList.Delete(1); } catch(char *s) { cout<<'\n'<<s<<endl; } cout<<'\n'<<"删除后的数据为:"<<endl; ScoreList.PrintList(); } |
五.实验心得与不足
(1)双链表的求长度和遍历操作的临界条件稍有变化,查找操作等也是具体问题具体分析,需要细心耐心地对待。
(2)循环双链表检索和遍历数据操作更加灵活,又因其对称结构,使之插入和删除操作都变得更容易,大大减小了时间复杂度。
(3)这次实验我了解到算法操作的一些“临界”条件的重要性,这也是我现在努力克服的一个难关,希望以后自己能多多增强逻辑思维能力。
相关文章推荐
- 实验二(3)用循环双链表实现对数据的基本操作
- 循环双链表的基本操作实现
- 循环双链表基本操作C++实现
- 顺序队列(循环队列)基本操作实现 C语言
- c语言实现循环链表的基本操作
- 实现循环队列的基本操作
- 【数据结构】双向循环线性表的基本操作--C++/C实现
- 【C++数据结构】模版类实现双循环链表的基本操作
- 双链表的基本操作实现
- 双链表基本操作C++实现
- 写给初学数据结构的同学之(循环双链表基本操作,创建,插入,删除,排序)
- c++实现基本循环队列操作
- 循环队列的基本操作之代码实现_legend
- C语言实现循环队列基本操作(初始化、判断队空、入队、出队)
- 循环队列基本操作的实现(Java)
- !实现循环双链表各种基本运算的算法
- 【数据结构】双向循环线性表的基本操作--C++/C实现
- 循环双链表的插入和删除的一些基本操作java版
- C语言单链表,双向链表,循环单链表,循环双链表的基本操作
- 数据结构-循环队列的基本实现操作