c++实现简单的链表
注:我是一个编程菜鸟,哪个大神看出来缺陷提点一下,感激不尽。
链表由一个个的节点串联而成,同一由first头指针管理,属于线性表中相比于数组,添加删除方便,但访问又有点慢的数据结构。
第一步:节点 Node的类。
class Node
{
friend class List;//把List声明为友类,好在List类中容易访问Node的私有成员。
private:
char Data;
Node* next;
} ;//节点有两个数据成员,数据域的字符类型的 Data,以及指向下一个节点的指针域 next。
第二步: 链表List的类。
class List
{
Node* first;//第一个节点的指针
Node* end;//最后一个节点的指针。。。这一个数据成员可有可无,我用来记录最后一个节点的指针,添加新元素将会很快。
public:
//构造函数
List()
{
first=nullptr;
end=nullptr;
}
/*添加元素*/
Node* push_back(char p_back)
{
Node* a=new Node;
a->Data=p_back;
a->next=nullptr;
if(a!=nullptr)
{
if (!first) //添加时是第一个节点的情况
{
first=a;
end=a;
}
end->next=a;//已添加的最后一个节点的next指针赋值新添加的节点地址
end=a;//end赋新的节点的地址。
return end;
}
else
{
cout<<"节点分配空间失败"<<endl;
return nullptr;
}
}
/*显示链表中的各个元素*/
void print()
{
Node* h=first;
if (!h)
{
cout<<"空链表"<<endl;
}
else
{
while (h)
{
cout<<h->Data<<" ";
h=h->next;
}
}
}
/*链表元素计数*/
long count()
{
long acount=0;
Node* start=first;
while (start) {
acount++;
start=start->next;
}
return acount;
}
/*链表逆序*/
void reverse()
{
//尾指针指向first
end=first;
//第一个节点指针域设为Null ,为逆序链表的尾节点,在这之前需要找到下一个节点
Node* behind=first;//这个指针要做为下一个节点的next域。
Node* pre=first->next;//当前第一个节点的的next域,靠它寻找第二个节点
first->next=nullptr;//第一个节点变为尾节点
first=pre;//first指向第二个节点
while (first->next!=nullptr)
{
pre=first->next;//用于对first赋值
first->next=behind;
behind=first;
first=pre;//first指向第二个节点
}
//还得执行最后一步
first->next=behind;
}
};
验证:
#include <iostream>
#include "List.h"
using namespace std;
int main(int argc, const char * argv[])
{
List a;
a.push_back('h');
a.push_back('e');
a.push_back('l');
a.print();
cout<<endl;
cout<<"该链表有:"<<a.count()<<"个元素。"<<endl;
cout<<endl;
cout<<"链表逆序之后输出:"<<endl;
a.reverse();
a.print();
cout<<endl;
cout<<"该链表有:"<<a.count()<<"个元素。"<<endl;
return 0;
}
结果:
h e l
该链表有:3个元素。
链表逆序之后输出:
l e h
该链表有:3个元素。
Program ended with exit code: 0
注:我没有写析构函数,这会造成该程序运行时它的内存空间泄露,不过程序结束后,内存会被全部回收的。所有便于演示就没有写析构,不过大家千万不要学我呀。
c++实现简单的链表的更多相关文章
- C链表之创建简单静态链表
C代码: #include<stdio.h> #include<stdlib.h> #include<malloc.h> //创建简单静态链表 typedef st ...
- 数据结构|-用C#实现一个简单的链表
我们知道C#中是没有链表的,我们可以自己实现一个 整个单链表能实现的功能有: 功能 方法 返回值 备注 获取链表长度 GetLength() int 返回值是链表长度 清空链表 Clear() voi ...
- c++ 简单静态链表
所有结点(结构体变量)都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为静态链表.对各结点既可以通过上一个结点的next指针去访问,也可以直接通过结构体变量名s1, s2, s3去访问 ...
- c语言的一个简单的链表
此程序为作业题: 但不忍丢弃成果: 所以记一下: 哦,对了,有一个易错点:在链表里,字符要用字符数组,不能用单个字符. #include<stdio.h>#include<stdio ...
- linux简单内核链表排序
#include <stdio.h> #include <stdlib.h> #define container_of(ptr, type, mem)(type *)((uns ...
- 利用java实现一个简单的链表结构
*博客搬家:初版发布于 2014/07/04 定义: 所谓链表就是指在某节点存储数据的过程中还要有一个属性用来指向下一个链表节点,这样的数据存储方式叫做链表 链表优缺点: 优点:易于存储和删除 缺点: ...
- c 最简单的链表
#include <stdio.h> struct node { int data; struct node *next; //指向本身的指针 }; // main() { struct ...
- 再次复习数据结构:c语言链表的简单操作
最近呢,又要面临多次的数据结构与算法方面的试题了,而我呢,大概也重新温习c语言的基本要点快一个月了,主要是针对指针这货的角度在研究c语言,感觉又学到了不少. 现在c指针感觉知道点了,也就匆忙开展数据结 ...
- 用最简单的方式学Python单链表
Python 实现单链表 在本博客中,我们介绍单链表这种数据结构,链表结构为基于数组的序列提供了另一种选择(例如Python列表). 基于数组的序列和链表都能够对其中的元素保持一定得顺序,但采用的方式 ...
随机推荐
- 使用MaskFilter
使用MaskFilter MaskFilter类可以为Paint分配边缘效果. 对MaskFilter的扩展可以对一个Paint边缘的alpha通道应用转换.Android包含了下面几种MaskFil ...
- css响应式布局RWD
响应式布局结合了三大理念: 1)用于布局的弹性网络(百分比定义宽度) 2)用于图片和视频的弹性媒体 3)媒体查询 在布局中,需要注意的点有: 1)尽量用min-width/max-width,max- ...
- lua 类支持属性不能被修改
背景 lua是类是借助表的来实现的, 类被定义后, 在使用场景下, 不希望被修改.如果被修改, 则影响的类的原始定义, 影响所有使用类的地方. 例如: --- router.lua class fil ...
- front-end plugin, generate pdf with html5 and jquery
http://www.jqcool.net/jquery-jspdf.html[from this site] <html> <head></head> <s ...
- 日志时间格式有s,ms,us,如何排序最大10行
这个比较繁琐,谁有更好方法?告诉我 [root@module tmp]# cat oldboy.txt 12s120001ms12000000us13s[root@module tmp] ...
- SQLServer中用先进先出思想求成本价和平均成本单价
1.首先是创建表: create table #in ( id ,), TDate datetime not null, goodcode ) , InNum ,) null, --入库数量 Pric ...
- Android 屏幕适配
前言 手机的屏幕适配一直是非常麻烦的,现在我就以做笔记的方式来简单梳理下 单位理解 首先让我们先来看看关于手机所用到的单位 真实物理尺寸单位: mm:表示毫米,是屏幕的物理尺寸. in:表示英寸,是屏 ...
- github Android-Universal-Image-Loader
目存在于Github上面https://github.com/nostra13/Android-Universal-Image-Loader,我们可以先看看这个开源库存在哪些特征 多线程下载图片,图片 ...
- eclipse安装svn
- 【003:jsoncpp的简单使用】
#include <json/json.h> #include <iostream> #include <string> using namespace std; ...