顺序表的基本操作实现
来源:互联网 发布:win10安装软件失败 编辑:程序博客网 时间:2024/05/17 03:24
内容简介:该文章包含建立数据表,实现数据插入、查找、删除、遍历等功能的程序以及编写过程遇到的问题和心得。
在开始编写程序前,需要明确程序要执行的功能,然后进行分析并抽象出具体的数据模型,形成基本的思路。有了想法,接下来就是通过数据表示和数据处理得出算法进而转换为程序设计语言。
由于线性表的数据元素类型不确定,所以采用C++的模板机制,首先定义一个模板类
#includeusing namespace std;const int Max=100;template class LinkList{public:LinkList(){Length=0;} /*无参构造函数*/LinkList(T a[],int n); /*建立有n个元素的顺序表*/~LinkList(){}; /*析构函数*/void Insert(int i,T x); /*在第i个位置中插入元素值为X的元素*/int Length(){return length;} /*求顺序表的长度*/T Get(int i); /*按位查找,在顺序表中查找第i个结点的元素值*/int Locate(T x); /*按值查找*/T Delete(int i); /*删除顺序表中第i个结点*/void PrintList(); /*依次输出各元素*/private:int length; //线性表的长度T data[Max]; //存放数据的数组};
然后根据每个函数需要实现的功能进行定义
//顺序表有参构造函数templateLinkList ::LinkList(T a[],int n){if(n>Max)throw "参数非法";for(int i=0;i void LinkList ::Insert(int i,T x){if(i<1||i>length+1)throw "参数非法";else{ for(int j=length;j>=i;j--){ data[j]=data[j-1]; //第j个元素存在数组下标为j-1处}data[i-1]=x;length++;}}//顺序表按位查找template T LinkList ::Get(int i){ if(i<1||i>length) throw "位置非法"; else { return data[i-1]; }}//顺序表中按值查找template int LinkList ::Locate(T x){ for(int i=0;i T LinkList ::Delete(int i){ if(i<1||i>length) throw "位置非法"; else { T x=data[i-1]; for(int j=i;j void LinkList ::PrintList(){ for(int i=0;i
接下来就是编写主函数了,因为线性表的数据类型是不确定的,所以可以设置一个简单的菜单栏让用户进行选择输入的数据类型
int main(){ int n;int w; cout<<'\n'<<"请选择您要输入的数据类型:"<>w; switch(w) { case 1: { int a[100];int i; cout<<"请输入数组的大小"< >n; cout<<"请输入数组元素:"< >a[i]; } LinkList one(a,n); //带参构造函数 cout<<'\n'<<"线性表的长"< >s; cout<<"您所查询的数据为:"; cout< >x; cout<<"你所查找的值所在的位置为:"< >k; cout<<"删除成功!你所删除的数据为:"< >n; cout<<"请输入数组元素:"< >a[i]; } LinkList one(a,n); //带参构造函数 cout<<'\n'<<"线性表的长"< >s; cout<<"您所查询的数据为:"; cout< >x; cout<< "你所查找的值所在的位置为:"< >k; cout<<"删除成功!你所删除的数据为:"<
输入元素后调用Length和PrintList函数,输出顺序表的长度和内容,然后依次执行查询、删除的功能,为了让用户观察到是否删除成功,可在最后调用PrintList遍历出数组元素。
遇到的问题:
1.在插入函数的定义时没有意识到第“j”个元素存在数组下标为”j-1”处,在输入i后才发现序号不对。
2.在插入函数以及其他函数定义时忽略了对‘i’的判断,没有考虑到输入数据非法的问题。
心得:
通过编写程序对线性表有了初步的认识,同时对模板的使用更加熟练。更重要的是,通过自己调试程序更容易意识到程序的不足之处,可以更好的优化程序,给用户更好的体验。而且可以根据自己的需求让程序变得更多样化。最后通过自己动手定义类型,能够更深刻地体会到模板机制的优势,更能体会到顺序表随机存取的特点。
阅读全文
1 0
- 顺序表中基本操作的实现
- 实现数据结构顺序表的基本操作
- 编程实现顺序表的基本操作
- 顺序表的基本操作实现代码
- 顺序表实现栈的基本操作
- 顺序表的基本操作实现
- C++实现顺序表的基本操作
- 顺序表的基本操作实现
- 顺序表基本操作的代码实现:C++实现
- 使用JS实现的顺序表的基本操作
- 线性表的顺序表示和基本操作的实现
- 实现基于静态数组的顺序表的基本操作
- 编程实现顺序表的以下基本操作:建立顺序表,修改顺序表,插入顺序表,删除顺序表。
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 顺序表的基本操作
- 扩展gcd以及同余方程ax=b(mod M)
- CustomViewDemo自定义view
- 二叉搜索树的后序遍历序列java实现
- ssm-xml配置式整合
- ubuntu14.04安装mysql并且开启外网访问
- 顺序表的基本操作实现
- C++ STL中的容器简介
- 线程、进程、协程
- C++ Singleton模式之线程安全
- 为什么href超链接就是Get请求,而form就是post请求,form表单里写get呢?
- 文章标题
- Java 实现 Map 和 Object 互相转换的几种方法
- 超链接的请求方式是什么 是get 还是post?
- 为什么只需要一个eden而需要两个survivor?