数据结构-------单链表(C++)
相关信息:
/** * @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++)的更多相关文章
- python实现数据结构单链表
#python实现数据结构单链表 # -*- coding: utf-8 -*- class Node(object): """节点""" ...
- C语言数据结构-单链表的实现-初始化、销毁、长度、查找、前驱、后继、插入、删除、显示操作
1.数据结构-单链表的实现-C语言 typedef struct LNode { int data; struct LNode* next; } LNode,*LinkList; //这两者等价.Li ...
- 数据结构——单链表java简易实现
巩固数据结构 单链表java实现 单链表除了表尾 每个几点都有一个后继 结点有数据和后继指针组成 通过构建表头和表尾(尾部追加需要)两个特殊几点 实现单链表的一些操作,代码如下 package co ...
- C# 数据结构--单链表
什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是 ...
- C# 数据结构 - 单链表 双链表 环形链表
链表特点(单链表 双链表) 优点:插入和删除非常快.因为单链表只需要修改Next指向的节点,双链表只需要指向Next和Prev的节点就可以完成插入和删除操作. 缺点:当需要查找某一个节点的时候就需要一 ...
- 数据结构—单链表(类C语言描写叙述)
单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不连续的) ...
- python算法与数据结构-单链表(38)
一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...
- 数据结构——单链表(singly linked list)
/* singlyLinkedList.c */ /* 单链表 */ /* 单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素. */ #include <stdio ...
- 数据结构-单链表-类定义2-C++
上一次的C++链表实现两个单链表的连接不太理想,此次听了一些视频课,自己补了个尾插法,很好的实现了两个链表的连接,当然了,我也是刚接触,可能是C++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据 ...
随机推荐
- mysql:通用查询日志general_log
1.通用查询日志:记录建立的客户端连接和执行的语句,通用查询日志默认情况下不是开启的,通用查询日志是以文本方式存放的 当需要采样分析的时候手工开启: SET Global general_log=1; ...
- chosen 下拉框
$("#teams").trigger("liszt:updated");//更新重新绑定 $(" ...
- 关于egit的日常操作总结
$git fetch -p --prune -p -- remove any remote tracking branches that no longer exist remotely prune的 ...
- 【转】adb uninstall卸载apk文件说明
昨天在使用adb卸载程序,结果死活卸载不了.我输入的命令和系统提示如下: [plain] view plaincopy arthur@arthur-laptop:~$ adb uninstall ...
- HTTP层 —— 中间件
1.简介 HTTP 中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制.例如,Laravel 内置了一个中间件来验证用户是否经过授权,如果用户没有经过授权,中间件会将用户重定向到登录页面,否则 ...
- PHP中foreach循环详解
首先要说的是,其实我对foreach循环的用法并不是很精通,说详解,其实也只是我自己的理解,希望对你能有点帮助 . 先来看一下foreach的语法: foreach ($array as $key=& ...
- 对css float 浮动的学习心得
css float浮动详解 @(css float)[hasLayout|clear float|妙瞳] css float的定义和用法 float 属性定义元素在哪个方向浮动.以往这个属性总应用于图 ...
- 在ef下使用lambda实现left join
db.Categories .GroupJoin( db.Products, Category => Category.CategoryId, Product => Product.Cat ...
- Web开发知识点总结
前言:这是一篇简单的web开发知识点的总结,适用于刚开始学习编程的人来学习的.我是为了能够在熟记熟记这些知识点而总结的一篇文章. 1 什么是浏览器? (1) 浏览器就是接收浏览者的操作(打 ...
- SQL Server 负载均衡集群方案之Moebius
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 架构原理(Architecture) 测试环境(Environment) 安装Moebius( ...