循环双链表的基本操作实现
来源:互联网 发布:淘宝客自动采集api 编辑:程序博客网 时间:2024/05/29 02:21
一.实验目的
巩固线性表的数据结构的存储方法和相关操作,学会针对具体应用,使用线性表的相关知识来解决具体问题。
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)这次实验我了解到算法操作的一些“临界”条件的重要性,这也是我现在努力克服的一个难关,希望以后自己能多多增强逻辑思维能力。
阅读全文
0 0
- 循环双链表的基本操作实现
- 循环双链表的基本操作实现
- 循环队列的基本操作实现
- 实现循环队列的基本操作
- 数据结构-循环队列的基本实现操作
- 循环双链表基本操作C++实现
- 循环队列的基本操作之代码实现_legend
- c语言实现循环链表的基本操作
- 实验二(3)用循环双链表实现对数据的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环单链表的基本操作
- 循环单链表的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- 循环队列的基本操作
- Flash中的XML
- [UVA
- [UVA 10701]Pre,in and post (二叉树)(dfs)
- 颠倒的价牌
- 解决 IDEA 中src下xml等资源文件无法读取的问题
- 循环双链表的基本操作实现
- 面向对象(类、封装、this、构造方法)
- html 返回顶部
- 结合redis设计与实现的redis源码学习-6-intset(整数集合)
- [6.837]A0:迭代函数系统(IFS)
- 变态跳台阶(剑指Offer 第 9 题)
- XML、XSL、CSS实战
- java基础变量(1)
- TU-ctf-2016 pwn woO 分析记录