数据结构-------单链表(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++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据 ...
随机推荐
- Activity的启动模式及回退栈的概念
Activity的启动模式 standard 正常模式 在创建一个新的activity的时候,直接在栈顶创建一个新的activity singleTop 顶部单个 在创建一个新的activity的时候 ...
- 我的开发框架(WinForm)
近来,看园子里,好多同学,展示自己工作中的开发框架,有的功能强大,有的短小精悍,我也来凑个热闹,望各位大侠指点一二. 一.指导思想 1.尽量减少程序员对数据库的依赖,或者说尽力少的写sql 语句.根据 ...
- 【Slickflow学习】.NET开源工作流环境搭建(三)
第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-环境搭建 在VS2010中使用附加进程的方式调试IIS ...
- Android IntentService使用
因为多数启动服务不必同时处理多个请求(在多线程情景下会很危险),所以使用IntentService类实现服务是很好的选择.本经验将通过继承IntentService输出当前时间教大家如何使用Inten ...
- WinForm程序中两份mdf文件问题的解决
在项目中用程序中嵌入mdf文件的方式来进行SQLServer数据库开发非常方便,用来发布开源项目等很方便,点击就可以运行,免部署,特别是在教学中用起来更加方便,老师不用先将数据库文件detach再发给 ...
- vim自动补全:go
1 环境配置 export GOPATH=/home/go 2 在新建GOPATH下新建三个目录 mkdir src pkg bin src 存放源码pkg 存放编译生成的文件bin 存放生成的可执行 ...
- 【MySQL】MySQL中针对大数据量常用技术_创建索引+缓存配置+分库分表+子查询优化(转载)
原文地址:http://blog.csdn.net/zwan0518/article/details/11972853 目录(?)[-] 一查询优化 1创建索引 2缓存的配置 3slow_query_ ...
- linux process 相关命令
1.显示指定用户信息:ps -u root 2.显示所有进程信息,连同命令行:ps -ef 3. ps 与grep 常用组合用法,查找特定进程:ps -ef|grep ssh 4. 把所有进程显示出来 ...
- Map 对象
1.创建一个Map对象 var map=new Map(); 2.size属性 //给map添加一些值 map.set("name","张三"); map.se ...
- 用python下载辞典
用python下载词源词典Etymoline Online Etymology Dictionary是最好的 English 词源词典,现在来说没有之一.但是,一直在PC上查单词有时不是很方便,遂就想 ...