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列表). 基于数组的序列和链表都能够对其中的元素保持一定得顺序,但采用的方式 ...
随机推荐
- Python之路-jQuery
参考网址:http://jquery.cuishifeng.cn/ 1.安装环境 2.查找元素 3.操作元素 一.安装环境: 1.我们需要去官网下载jQuery,地址:http://jquery.co ...
- hduoj 1285 确定比赛名次
http://acm.hdu.edu.cn/showproblem.php?pid=1285 确定比赛名次 Time Limit: 2000/1000 MS (Java/Others) Memory ...
- csuoj 1391: Boiling Vegetables
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1391 1391: Boiling Vegetables Time Limit: 1 Sec Me ...
- eclipse自动补全快捷键失效,sysout用不了!
好久没写Java代码了,使用新版Neon的Eclipse Java EE IDE开发时,自动补全各种失败,sysout也各种用不了, 开始还以为是电脑卡比呢,原来是版本的快捷键不同了,修改方法如下! ...
- JavaScript中数组操作常用方法
JavaScript中数组操作常用方法 1.检测数组 1)检测对象是否为数组,使用instanceof 操作符 if(value instanceof Array) { //对数组执行某些操作 } 2 ...
- AngularJs的UI组件ui-Bootstrap
http://www.cnblogs.com/pilixiami/p/5597634.html
- SQL 2008 R2下载 升级R2 SP1或者SQL 2008从10.50.1600升级10.5.2500
SQL Server 2008 R2 中英文 开发版/企业版/标准版 链接地址 一. 简体中文 1. SQL Server 2008 R2 Developer (x86, x64, ia64) - D ...
- DataGrid获取当前行某列值
前言: 本文将给大家介绍一下, 在ASP.NET MVC环境下,如何利用Jquery MiniUI(一个专业WebUI控件库)来获取Datagrid中的值,官网没有涉及到的内容:如何获取当前行某一列的 ...
- quick-cocos2d-x :加入学习
语法不熟悉, 接口不熟悉. 部分不理解. 超级初学者. 好好学习, 一直在学习 使用Quick-Cocos2d-x搭建一个横版过关游戏 推荐官方的文档和例子 demo
- 百度api短信开发
公司原来有一个短信发送的功能,是调用第三方的,但是很不稳定,时不时就收不到短信,但是钱已经扣了.对于这样的事,谁都忍受不了的.于是想找一个稳定短信发送平台,第一想到的是阿里云,百度.在这两个平台上公司 ...