C++数据结构之List--线性实现
List(表)类似于队列,不同于队列的是,list可以随机读取/修改/插入某一position,通过position这一位置信息就可以直接修改相应位置的元素。实现方式和队列的类似,多了个position的参数。
注意,因为list的定义使用了模板类,所以其定义和实现需要在同一个文件下,当然,也有其他方式实现二者分离,但比较复杂,网上有方法。
代码:
List.cpp
// 特别注意:模板类不能分离编译,类实现要在同一个文件下
enum Error_code {success,underflow,overflow,range_error};
const int max_list = 10;
template <class List_entry>
class List
{
public:
// methods of the List ADT
List();
int size()const;
bool full()const;
bool empty()const;
void clear();
void traverse(void(*visit)(List_entry &)); //遍历
Error_code retrieve(int position, List_entry &x)const;//察看
Error_code replace(int position, const List_entry &x);
Error_code remove(int position, List_entry &x);//移除并挂载
Error_code insert(int position, const List_entry &x);//插入
protected:
// data members for a contiguous list implementation
int count;
List_entry entry[max_list];
};
template <class List_entry>
List<List_entry>::List()
{
count = 0;
for(int i = 0; i < max_list; i++)
entry[i] = 0;
}
template <class List_entry>
int List<List_entry>::size()const
{
return count;
}
template <class List_entry>
bool List<List_entry>::full()const
{
return (count >= max_list);
}
template <class List_entry>
bool List<List_entry>::empty()const
{
return count == 0;
}
template <class List_entry>
void List<List_entry>::clear()
{
count = 0;
}
template <class List_entry>
void List<List_entry>::traverse(void(*visit)(List_entry &x))
{
//int i;
for(int i = 0; i < count; i++)
{
(*visit)(entry[i]);
}
}
template <class List_entry>
Error_code List<List_entry>::retrieve(int position, List_entry &x)const
{
if(empty())
return underflow;
if(position < 0 || position > count)
return range_error;
else
{
x = entry[position];
return success;
}
}
template <class List_entry>
Error_code List<List_entry>::replace(int position,const List_entry &x)
{
if(empty())
return underflow;
if(position < 0 || position > count)
return range_error;
else
{
entry[position] = x;
return success;
}
}
template <class List_entry>
Error_code List<List_entry>::remove(int position,List_entry &x)
{
if(empty())
return underflow;
if(position < 0 || position > count)
return range_error;
x = entry[position];
for(int i = position; i < count-1; i++)
entry[position] = entry[position+1];
count--;
return success;
}
template <class List_entry>
Error_code List<List_entry>::insert(int position,const List_entry &x)
{
if(full())
return overflow;
if(position < 0 || position > count)
return range_error;
for(int i = count-1; i >= position; i--)
entry[i+1] = entry[i];
entry[position] = x;
count++;
return success;
}
main.cpp(可为其他文件名,只有代码中有main函数即可):
/*
* main.cpp
*
* Created on: 2015年9月13日
* Author: Lv_Lang
*/
#include "List.cpp"
#include <cstdio>
void print(int &x)
{
printf("%d\n",x);
}
void test()
{
List<int> mylist;
for(int i = 0; i < 10; i++)
mylist.insert(i,i+1);
int a,b;
mylist.retrieve(1,a);
printf("%d\n",a);
mylist.replace(1,111);
mylist.retrieve(1,b);
printf("%d\n",b);
int size = mylist.size();
printf("%d\n",size);
mylist.traverse(print);
}
int main()
{
test();
return 0;
}
在List的成员函数中,有一个比较有趣同时比较有用就是traverse遍历函数,这个函数的参数是一个函数的指针,而这个函数可以在后期(main函数)中自己定义,这个比较值得考究理解下其效用性。
C++数据结构之List--线性实现的更多相关文章
- Java数据结构介绍(线性结构和非线性结构)
数据结构包括:线性结构和非线性结构. 线性结构 数据元素之间存在一对一的线性关系 包括顺序存储结构和链式存储结构.顺序存储的线性表称为顺序表,顺序表中的存储元素是连续的 链式存储的线性表称为链表,链表 ...
- 【C#数据结构系列】线性表
一:线性表 1.1:定义:零个或多个数据元素的有限序列 1.2: 线性表元素个数n定义为线性表的长度,n = 0称为空表,i 为数据元素ai在线性表中的位序. 1.3:满足线性表的条件:(1):有序, ...
- 【算法与数据结构实战】线性表操作-实现A并B,结果放入A中
//数据结构与算法基础题1:线性表操作,实现A并B,结果放入A中 #include "stdafx.h" #include <iostream> #include &l ...
- PHP数据结构之二 线性表中的顺序表的PHP实现
线性表 (一)基本特点:最基本.最简单.最常用的一种数据结构 在这种结构中: 1.存在一个唯一的被称为“第一个”的数据元素: 2.存在一个唯一的被称为“最后一个”的数据元素: 3.除第一个元素外,每个 ...
- C语言数据结构——第二章 线性表
二.线性表 2.1-线性表简介 2.1.1-线性表的定义 线性表是由若干个相同特性的数据元素组成的有限序列.若该线性表不包含任何元素,则称为空表,此时长度为0,当线性表不为空时,表中的元素的个数就是线 ...
- C++ 数据结构 1:线性表
1 数据结构 1.1 数据结构中基本概念 数据:程序的操作对象,用于描述客观事物. 数据的特点: 可以输入到计算机 可以被计算机程序处理 数据是一个抽象的概念,将其进行分类后得到程序设计语言中的类型. ...
- JAVA中的数据结构——集合类(线性表:Vector、Stack、LinkedList、set接口;键值对:Hashtable、Map接口<HashMap类、TreeMap类>)
Java的集合可以分为两种,第一种是以数组为代表的线性表,基类是Collection:第二种是以Hashtable为代表的键值对. ... 线性表,基类是Collection: 数组类: person ...
- c语言数据结构学习心得——线性表
线性表:具有相同数据类型的n(n>0)个数据元素的有限序列. 主要有顺序存储和链式存储. 顺序存储: 特点:地址连续,随机/存取,顺序存储. 建立:首地址/存储空间大小(数组),表长. 方式:静 ...
- 数据结构 - 静态顺序线性表的实行(C语言)
数据结构 - 静态顺序线性表的实行(C语言) 1 获取元素操作 对于线性表的顺序存储结构来说,如果我们要实现GetElem操作,即将线性表L中的第i个位置元素值返回,其实是非常简单的. 只要i的数值在 ...
- 数据结构导论 四 线性表的顺序存储VS链式存储
前几章已经介绍到了顺序存储.链式存储 顺序存储:初始化.插入.删除.定位 链式存储:初始化.插入.删除.定位 顺序存储:初始化 strudt student{ int ID://ID char nam ...
随机推荐
- as与c++的反射机制对比
所谓反射机制(Reflection),简单来说,就是可以根据class的名称获取这个class以及其对应的实例.具体来说, 指的是我们可以于运行时加载.探知.使用编译期间完全未知的classes.换句 ...
- ios 给uiview创作遮罩
mask一定是PNG格式的图像,去掉背景 .jpg格式图片没有alpha values 遮罩是通过图片透明度的信息实现与颜色无关 UIImage*_maskingImage =[UIImage ima ...
- 静态类和静态类成员(C# 编程指南)
静态类与非静态类基本相同,但存在一个区别:静态类不能实例化. 也就是说,不能使用 new 关键字创建静态类类型的变量. 因为没有实例变量,所以要使用类名本身访问静态类的成员. 例如,如果名为 Util ...
- HTML5自定义属性对象Dataset简介
一.html5 自定义属性介绍 我之前翻译的“你必须知道的28个HTML5特征.窍门和技术”一文中对于HTML5中自定义合法属性data-已经做过些介绍,就是在HTML5中我们可以使用data-前缀设 ...
- Growing转化的每一步(笔记整理)
渠道流量监控中,如何将劣质流量和优质流量区分开来? 劣质流量总会有有一些不同于其他正常渠道的特征,比如在同一个时间中大量集中访问.使用的硬件设备比较固定.使用特定的浏览器等. 实际案例:去年有一些 A ...
- meta viewport 详解
ViewPort <meta>标记用于指定用户是否可以缩放Web页面,如果可以,那么缩放到的最大和最小缩放比例是什么.使用ViewPort <meta>标记还表示文档针对移动设 ...
- 原生JavaScript实现mouseenter
mouseenter和Mouseleave都是jquery的事件,JavaScript的mouseover和mouseout每个子元素都会触发,从子元素移到父元素也会触发,用起来不很方便,而且触发的太 ...
- 安装hadoop-2.3.0-cdh5.1.2全过程
工欲善其事,必先利其器,啥都不说,Hadoop下载:http://archive.cloudera.com/cdh5/cdh/5/ 选择好相应版本搞起,在本文讲述的是 围绕hadoop-2.3.0- ...
- Windows 8 App: Information about CloudsCool Helper application
Website:http://www.cloudscool.com: App download address:http://dwz.cn/7DOJm: App English introduct ...
- java入门第一步之完成jdk的安装(window)【转】
为了面向更多的人类,我决定重温我的java起步: 要进行java开发第一步就是进行java环境的安装,也就是jdk的按装: 1.由于java被oracle收购了,我们下载jdk也就去oracle的官网 ...