相关信息:


 /**

  * @subject 数据结构   实验2
* @author 信管1142班 201411671210 赖俊杰
* @project 单链表
* @time 2015年10月29日16:09:34
*/

节点类:


//Node.h

template<typename DataType>
class Node
{
public: DataType data_;
Node<DataType> *next_;
};

链表类:


 //  LinkList.h

 #include<iostream>
#include"Node.h" using std::cout;
using std::endl; template <typename DataType>
class LinkList
{
public:
LinkList(); //建立只有头节点的空链表
LinkList(DataType a[], int n); //建立有n个元素的单链表
~LinkList(); int Length();
DataType Get_value(int serial_number); //在单链表中查找序号为serial_number的元素
int Locate_serial_number(DataType value); //查找值为value的元素序号
void insert(int i, DataType value); //在第i个位置插入值为value的元素
DataType delete_value(int serial_number); //删除序号为serial_number的元素
void PrintList(); private:
Node<DataType>*first_; }; template<typename DataType>
inline LinkList<DataType>::LinkList()
{
first_ = new Node;
first_->next_ = ;
} template<typename DataType>
inline LinkList<DataType>::LinkList(DataType a[], int n)
{ first_ = new Node<DataType>;
Node<DataType> *r = first_;
for (int i = ; i < n; ++i)
{
Node<DataType> *s = new Node<DataType>;
s->data_= a[i];
r->next_ = s;
r = s;
}
r->next_ = ;
} template<typename DataType>
inline LinkList<DataType>::~LinkList()
{
while (first_->next_ != )
{
Node<DataType> *p = new Node<DataType>;
p = first_;
first_ = first_->next_;
delete p;
}
} template<typename DataType>
inline int LinkList<DataType>::Length()
{
Node<DataType> *p = new Node<DataType>;
p = first_->next_;
int count = ;
while (p != )
{
p = p->next_;
++count;
}
return count;
} template<typename DataType>
inline DataType LinkList<DataType>::Get_value(int serial_number)
{
Node<DataType> *p = new Node<DataType>;
p = first_->next_;
int count = ;
while (p != && count < serial_number)
{
p = p->next_;
++count;
}
if (p == )
{
throw"non-existent";
}
else
{
return p->data_;
}
} template<typename DataType>
inline int LinkList<DataType>::Locate_serial_number(DataType value)
{
Node<DataType> *p = new Node<DataType>;
p = first_->next_;
int count = ;
while (p!=)
{
if (p->data_==value)
{
return count;
}
p = p->next_;
++count;
}
return ; } template<typename DataType>
inline void LinkList<DataType>::insert(int i, DataType value)
{
Node<DataType> *p = new Node<DataType>;
p = first_;
int count = ;
while (p != && count < i - )
{
p = p->next_;
++count;
}
if (p == )
{
throw"seat-non-existent";
}
else
{
Node<DataType> *s = new Node<DataType>;
s->data_ = value;
s->next_ = p->next_;
p->next_ = s;
}
} template<typename DataType>
inline DataType LinkList<DataType>::delete_value(int serial_number)
{
Node<DataType> *p = new Node<DataType>;
p = first_;
int count = ;
while (p != && count < serial_number - )
{
p = p->next_;
++count;
}
if (p==||p->next_==)
{
throw"seat-non-existent";
}
else
{
Node<DataType>*q = p->next_;
DataType x = q->data_;
p->next_ = q->next_;
delete q;
return x;
}
} template<typename DataType>
inline void LinkList<DataType>::PrintList()
{
Node<DataType>*p = new Node<DataType>;
p = first_->next_;
while (p!=)
{
cout << p->data_ << " ";
p = p->next_;
}
cout << endl;
}

测试类:


 //main.cpp

 #include"LinkList.h"
#include"Node.h" int main() {
int r[] = { ,,,, };
LinkList<int>L(r, ); cout << "第一次输出:";
L.PrintList(); cout << "第2个位置插入3后:";
L.insert(, );
L.PrintList(); cout << "值为5的元素位置:";
cout << L.Locate_serial_number() << endl; cout << "删除第一个元素后:";
L.delete_value();
L.PrintList(); return ;
}

运行结果:



数据结构-------单链表(C++)的更多相关文章

  1. python实现数据结构单链表

    #python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...

  2. C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作

    1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...

  3. 数据结构——单链表java简易实现

    巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成  通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...

  4. C# 数据结构--单链表

    什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是 ...

  5. C# 数据结构 - 单链表 双链表 环形链表

    链表特点(单链表 双链表) 优点:插入和删除非常快.因为单链表只需要修改Next指向的节点,双链表只需要指向Next和Prev的节点就可以完成插入和删除操作. 缺点:当需要查找某一个节点的时候就需要一 ...

  6. 数据结构—单链表(类C语言描写叙述)

    单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不连续的) ...

  7. python算法与数据结构-单链表(38)

    一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...

  8. 数据结构——单链表(singly linked list)

    /* singlyLinkedList.c */ /* 单链表 */ /* 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. */ #include <stdio ...

  9. 数据结构-单链表-类定义2-C++

    上一次的C++链表实现两个单链表的连接不太理想,此次听了一些视频课,自己补了个尾插法,很好的实现了两个链表的连接,当然了,我也是刚接触,可能是C++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据 ...

随机推荐

  1. dl dd dt与ul li

    像这种格式的网页,可以用dl来实现,比较方便

  2. 不使用Math.random实现随机数。

    var rand = (function(){ var today = new Date(); var seed = today.getTime(); function rnd(){ seed = ( ...

  3. CentOS7.0下载各版本说明 新增Everything版

    来源:http://www.centoscn.com/CentOS/2014/0708/3268.html 下载CentOS-7.0-1406的时候,有很多可选则的版本,对于初学者来说,不知道选择哪个 ...

  4. 最大公约数与欧几里得(Euclid)算法

    ---恢复内容开始--- 记a, b的最大公约数为gcd(a, b).显然, gcd(a,b)=gcd(|a|,|b|). 计算最大公约数的Euclid算法基于下面定理: [GCD递归定理]对于任意非 ...

  5. Android开发了解——ODEX

    ODEX是安卓上的应用程序apk中提取出来的可运行文件,即将APK中的classes.dex文件通过dex优化过程将其优化生成一个·dex文件单独存放,原APK中的classes.dex文件会保留.这 ...

  6. 20150503-struts2入门-标签

    一.几个标签介绍 1.property标签 property标签用于输出指定值: <s:set name="name" value="'kk'" /> ...

  7. 项目开发中常用到的SQL语句

    阅读目录 循环示例 循环示例 循环示例 循环示例 1.循环示例 在前端面试中最常见的问题就是页面优化和缓存(貌似也是页面优化),被问了几次后心虚的不行,平然平时多少会用到一些,但突然问我,很难把自己知 ...

  8. Response.Redirect("");Server.Transfer("")跳转页面的区别

      Response.Redirect("") Server.Transfer("") 转向其他站点 能 不能(只能站内转向) 是否可带QueryString参 ...

  9. (八)Hibernate 映射关系

    所有项目导入对应的hibernate的jar包.mysql的jar包和添加每次都需要用到的HibernateUtil.java 第一节:Hibernate 一对一映射关系实现 1,按照主键映射: 2, ...

  10. [MAXscript Tool]TimeSlider v1.3

    一个简单的小工具,方便在MAX里面快速的修改帧速率,像maya一样.具体看视频演示.