数据结构-------单链表(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++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据 ...
随机推荐
- ios快捷键
分屏:cmd + option + return 退出分屏:cmd + return cmd + option + [ 代码上跳 cmd + [ 代码左移
- 我终于理解了LISP『代码即数据|数据即代码』的含义
以前我一直不能理解LISP里引用的作用,感觉引用和字符串没什么区别.比如:> (define (func) 'ok) > (func) 'ok 这里把引用ok当做了函数func的返 ...
- 使用greenDao出现Property 'status' is not part of ********.NewCommentDao@717de9a
应为版本号的原因造成的,升级Schema版本号即可
- C# IO操作(四)大文件拷贝(文件流的使用)、文件编码
大文件拷贝(文件流的使用).文件编码 首先说一下大文件拷贝和文件流,因为计算机的内存资源是有限的,面对几个G甚至更大的文件,需要通过程序来完成拷贝,就需要用到文件流(因为我们无法做到把文件一 ...
- JavaScript高级程序设计(三):基本概念:数据类型
特别注意:ECMAScript是区分大小写的. 一.变量 1.ECMAScript的变量是松散型的.所谓松散型就是可以用来保存任何类型的数据.即每个变量仅仅是一个用于保存值的占位符而已.定义变量时要使 ...
- GCD学习之dispatch_barrier_async
iOS常见的多线程开发方式有NSThread.NSOPeration和GCD,抽象程度依次提高,GCD是最抽象的,使用起来最简单,但相对来说功能有限,比如不能cancel任务,这也算是一点遗憾吧. 今 ...
- iOS调试程序时,启动应用失败的解决办法
最近在iOS项目中调试程序,项目中用到第三方应用来启动我的应用程序,调试阶段在实体机上用第三方应用启动我的应用时,出现如下错误,程序停止运行: 同时,在AppDelegate对象的如下方法中设置断点: ...
- Codevs 2611 观光旅游(floyed最小环)
2611 观光旅游 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 某旅游区里面有N个景点.两个景点之间可能直接有道路相连,用 ...
- CAF(C++ actor framework)使用随笔(projection 用法)(一)
最近干活在写毕设,用到了CAF,看了文档,发现了一些小坑,自己摸索写点随笔.(CAF的github网站 https://github.com/actor-framework/actor-framewo ...
- Walkthrough: Creating and Using a Dynamic Link Library (C++)
Original Link: http://msdn.microsoft.com/zh-cn/library/ms235636.aspx Following content is only used ...