数据结构-单链表-类定义C++
原理可访问https://www.cnblogs.com/yang901112/p/11674333.html
头文件
#ifndef RLIST_H
#define RLIST_H
#include <iostream> template <class T> class List; template <class T>
class ListNode
{
friend class List<T>;
public:
ListNode() { next = ; }
ListNode(T el, ListNode* ptr = ) {
data = el; next = ptr;
}
private:
T data;
ListNode *next;
}; template <class T>
class List
{
public:
List() {
head = ;
head = tail = ; }
~List();
int isEmpty() {
return head == ;
}
void addToHead(T); //从头插入结点
void addToTail(T); //从尾部插入节点
void disPlay() const;
T deleteFromHead(); //从头删除结点//若不需要返回值可以使用void
T deleteFromTail(); //从尾部删除节点
void deleteNode(T); //按值删除结点
bool isInList(T) const; //判断值是否在链表里
void Invert(); //反转链表
private:
ListNode<T> *head, *tail;
}; template <class T>
List<T>::~List() {
for (ListNode<T> *p; !isEmpty();) {
p = head->next;
delete head;
head = p;
}
} template <class T>
void List<T>::addToHead(T el) {
head = new ListNode<T>(el, head);
if (tail == )
tail = head;
} template <class T>
void List<T>::addToTail(T el) {
if (tail != ) {
tail->next = new ListNode<T>(el);
tail = tail->next;
}
else head = tail = new ListNode<T>(el);
} template <class T>
T List<T>::deleteFromHead() {
T el = head->data;
ListNode<T> *tmp = head;
if(head==tail)
{
head = tail = ;
}
else head = head->next;
delete tmp;
return el;
} template <class T>
T List<T>::deleteFromTail() {
T el = tail->data;
if(head==tail)
{
delete head;
head = tail = ;
}
else {
ListNode<T> *tmp;
for (tmp = head; tmp->next != tail; tmp = tmp->next);
delete tail;
tail = tmp;
tail->next = ;
}
return el;
} template <class T>
void List<T>::deleteNode(T el) {
ListNode<T> *previous = ;
ListNode<T> *current;
for (current = head; current && current->data != el;
previous = current, current = current->next);
if (current)
{
if (previous) { previous->next = current->next; }
else head = head->next;
delete current;
}
} /*****************************************/
//template <class T>
//bool List<T>::isInList(T el) const {
// bool flag = false;
// ListNode<T> *tmp;
// tmp = head->next;
// while (tmp) {
// if (tmp->data == el) {
// flag = true;
// break;
// }
// tmp = tmp->next;
// }
// return flag;
//} //可以使用for循环代替while代码可以简洁一些
template <class T>
bool List<T>::isInList(T el) const {
ListNode<T> *tmp;
for (tmp = head; tmp && tmp->data != el; tmp = tmp->next);
return tmp != ;
}
/*****************************************/ template <class T>
void List<T>::Invert() {
ListNode<T> *p = head, *q = ;
while (p)
{
ListNode<T> *r = q; q = p;
p = p->next;
q->next = r;
}
head = q;
} template <class T>
void List<T>::disPlay() const{
//ListNode<T> *p;
//p = head;
//while (p)
//{
// std::cout << p->data;
// if (p->next) { std::cout << "->"; } //就是仅在数字之间加"->"
// p = p->next;
//}
for (ListNode<T> *current = head; current; current = current->next)
{
std::cout << current->data;
if (current->next) std::cout << "->";
}
std::cout << std::endl;
} #endif
源文件
#include <iostream>
#include"Rlist.h"
#include <iomanip>
using namespace std; int main()
{
cout << "测试" << endl;
List<int> ilist;
ilist.addToTail();
ilist.addToTail();
ilist.addToTail();
ilist.addToTail();
ilist.disPlay();
ilist.deleteFromHead();
ilist.disPlay(); List<int> ilist2;
ilist2.addToHead();
ilist2.addToHead();
ilist2.addToHead();
ilist2.addToHead();
ilist2.disPlay();
cout << ilist2.isInList() << endl;
ilist2.deleteFromTail();
ilist2.disPlay();
cout << ilist2.isInList() << endl; List<char> charlist1;
charlist1.addToTail('a');
charlist1.addToTail('b');
charlist1.addToTail('c');
charlist1.addToTail('d');
charlist1.disPlay();
charlist1.Invert();
charlist1.disPlay();
charlist1.deleteNode('c');
charlist1.disPlay();
charlist1.deleteNode('e'); //虽然'e'不存在,但是不影响
charlist1.disPlay(); return ;
}
数据结构-单链表-类定义C++的更多相关文章
- 数据结构-单链表-类定义2-C++
上一次的C++链表实现两个单链表的连接不太理想,此次听了一些视频课,自己补了个尾插法,很好的实现了两个链表的连接,当然了,我也是刚接触,可能是C++的一些语法还不太清楚,不过硬是花了一些时间尽量在数据 ...
- C# 数据结构--单链表
什么是单链表 这两天看到很多有关单链表的面试题,对单链表都不知道是啥的我.经过学习和整理来分享一下啥是单链表和单链表的一些基本使用方法.最后看些网上有关单链表的面试题代码实例. 啥是单链表? 单链表是 ...
- python算法与数据结构-单链表(38)
一.链表 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个结点包括 ...
- 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++ 实现
单链表 单链表的定义 typedef int ElemType; typedef struct LNode { ElemType data; LNode *next; } LNode, *LinkLi ...
- 数据结构—单链表(类C语言描写叙述)
单链表 1.链接存储方法 链接方式存储的线性表简称为链表(Linked List). 链表的详细存储表示为: ① 用一组随意的存储单元来存放线性表的结点(这组存储单元既能够是连续的.也能够是不连续的) ...
- 数据结构实验2:C++实现单链表类
太简单了,直接贴题目然后上代码. 题目: 实验2 2.1 实验目的 熟练掌握线性表的链式存储结构. 熟练掌握单链表的有关算法设计. 根据具体问题的需要,设计出合理的表示数据的链式存储结构,并设计相关算 ...
随机推荐
- addEventListener与attachEvent区别
DOM2级事件处理程序 DOM2级事件定义了两个方法用于处理指定和删除事件处理程序的操作: addEventListener removeEventListener 所有的DOM节点都包含这两个方法, ...
- HTML5中的article和section的区别
HTML5中的article和section的区别 一.总结 一句话总结: article和section都相当于语义化后的div,article强调独立性,section强调分段或者分块 1.art ...
- vue 遇到防盗链 img显示不出来
在index.html中添加: <meta name="referrer" content="no-referrer">
- onenote 每天输入网络密码
1.问题:只局限 内网 笔记本的弹出输入远程内网服务器用户名密码的情况,每次重启电脑后又会要求输入,否则同步失败 2.解决 控制面板-windows用户-凭据管理器-添加凭据-从上到下一次输入 ip ...
- C++模板编程中只特化模板类的一个成员函数(花样特化一个成员函数)
转自:https://www.cnblogs.com/zhoug2020/p/6581477.html 模板编程中如果要特化或偏特化(局部特化)一个类模板,需要特化该类模板的所有成员函数.类模板中大多 ...
- MQTT基础概念介绍
https://blog.csdn.net/pipinet123/article/details/60866901 源博客地址:http://blog.csdn.net/pipinet123 MQTT ...
- Java 什么是静态内部类
#定义 Java语言允许在类中再定义类,这种在其它类内部定义的类就叫内部类. 有static关键字修饰的内部类. 比如:Pattern类中的Node类. public class Outer { pr ...
- 000 基于Spring boot发送邮件
发送邮件的程序,使用QQ的服务器,经过测试,完全可行.可复现 一:准备工作 1.找到账号的授权码 这个是程序需要使用的. 在设置中查找. 2.新建项目的目录 二:完整的程序代码 1.pom.xml & ...
- Python 线程,with的作用(自动获取和释放锁Lock)
Python 线程,with的作用(自动获取和释放锁Lock) import threading import time num= #全局变量多个线程可以读写,传递数据 mutex=threading ...
- .frm文件怎么导入到数据库
如题想搞个私服游戏,但是数据库文件按文档的操作方法行不通.只能自行导入. 其实.frm文件就是mysql表结构文件,你拷贝data那一块的文件到你电脑安装的mysql的data文件下就行了. 一.首先 ...