(C++版)链表(一)——实现单向链表创建、插入、删除等相关操作
http://blog.csdn.net/fisherwan/article/details/25557545
前段时间用C语言实现了链表的相关操作,但是发现当时挺清楚的,过了一段时间又忘的差不多了,所以现在打算用C++再实现一遍,由于初次用C++实现,存在错误的地方还望大家指针。下面就直接上代码:
- <span style="font-size:18px;" deep="5">#include <iostream>
- #include <stdlib.h>
- using namespace std;
- //结点类
- class Node {
- public:
- int data;
- Node *pNext;
- };
- //单向链表类
- class LinkList {
- public:
- LinkList() {
- //头结点不参与计数
- head = new Node;
- head->data = 0;
- head->pNext = NULL;
- }
- ~LinkList() { delete head; }
- void CreateLinkList(int n); //创建链表
- void InsertNode(int position, int d); //在指定位置插入结点
- void TraverseLinkList(); //遍历链表
- bool IsEmpty(); //判断链表是否为空
- int GetLength(); //链表长度
- void DeleteNode(int position); //删除指定位置结点
- void DeleteLinkList(); //删除整个链表
- private:
- Node *head;
- };
- void LinkList::CreateLinkList(int n) {
- if (n < 0) {
- cout << "输入结点个数错误!" << endl;
- exit(EXIT_FAILURE);
- }
- else {
- Node *pnew, *ptemp;
- ptemp = head;
- int i = n;
- while (n-- > 0) {
- pnew = new Node;
- cout << "输入第" << i - n << "个结点值:";
- cin >> pnew->data;
- pnew->pNext = NULL;
- ptemp->pNext = pnew;
- ptemp = pnew;
- }
- }
- }
- //postion从1开始计数,到链表长度加1结束,头结点后的结点称为第一个结点
- void LinkList::InsertNode(int position, int d) {
- if (position < 0 || position > GetLength() + 1) {
- cout << "输入位置错误!" << endl;
- exit(EXIT_FAILURE);
- }
- else {
- Node *pnew, *ptemp;
- ptemp = head;
- pnew = new Node;
- pnew->data = d;
- pnew->pNext = NULL;
- while (position-- > 1)
- ptemp = ptemp->pNext;
- pnew->pNext = ptemp->pNext;
- ptemp->pNext = pnew;
- }
- }
- void LinkList::TraverseLinkList() {
- Node *p = head->pNext;
- while (p != NULL) {
- cout << p->data << " ";
- p = p->pNext;
- }
- cout << endl;
- }
- bool LinkList::IsEmpty() {
- if (head->pNext == NULL)
- return true;
- else
- return false;
- }
- int LinkList::GetLength() {
- Node *p = head->pNext;
- int n = 0;
- while (p != NULL) {
- n++;
- p = p->pNext;
- }
- return n;
- }
- //position只能从1开始到链表长度结束
- void LinkList::DeleteNode(int position) {
- if (position < 0 || position > GetLength()) {
- cout << "输入位置错误!" << endl;
- exit(EXIT_FAILURE);
- }
- else {
- Node *ptemp = head, *pdelete;
- while (position-- > 1)
- ptemp = ptemp->pNext;
- pdelete = ptemp->pNext;
- ptemp->pNext = pdelete->pNext;
- delete pdelete;
- pdelete = NULL;
- }
- }
- void LinkList::DeleteLinkList() {
- Node *pdelete = head->pNext, *ptemp;
- while(pdelete != NULL) {
- ptemp = pdelete->pNext;
- head->pNext = ptemp;
- delete pdelete;
- pdelete = ptemp;
- }
- }
- //测试函数
- int main() {
- LinkList l;
- int position = 0, value = 0, n = 0;
- bool flag = false;
- cout << "请输入需要创建单向链表的结点个数:";
- cin >> n;
- l.CreateLinkList(n);
- cout << "打印链表值如下:";
- l.TraverseLinkList();
- cout << "请输入插入结点的位置和值:";
- cin >> position >> value;
- l.InsertNode(position, value);
- cout << "打印链表值如下:";
- l.TraverseLinkList();
- cout << "请输入要删除结点的位置:";
- cin >> position;
- l.DeleteNode(position);
- cout << "打印链表值如下:";
- l.TraverseLinkList();
- l.DeleteLinkList();
- flag = l.IsEmpty();
- if (flag)
- cout << "删除链表成功!" << endl;
- else
- cout << "删除链表失败!" << endl;
- return 0;
- }</span>
上面是单向链表的实现,和C的实现其实是差不多的,就是换了一种描述方式。要注意的地方还是和C语言实现是一样的,测试结果如下:
(C++版)链表(一)——实现单向链表创建、插入、删除等相关操作相关推荐
- python3链表_python3实现单向链表
创建单向链表有很多种方式,个人觉得从数组创建比较方便,不多说,直接上代码 class linkNode(): """ 链表节点类 """ d ...
- 【单向链表】数据结构——单向链表的介绍与代码实现笔记
从今天开始将修炼数据结构专栏,将持续更新,分模块学习. 数据结构--单向链表 一.数据结构 1.什么是数据结构? 2.逻辑结构和物理结构 二.链表--线性结构 1.首先介绍下链表和数组的区别 2.链表 ...
- java 单向链表 双向链表_java 单向链表与双向链表的实现
链表 单向链表 单向链表概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的. 这是一种物理结构,不是树那样的逻辑结构.链表和顺序表两种物理结构, ...
- C语言之链表探究之单向链表(List)、附双向循环链表参考博文地址
参考博文:C语言数据结构-创建链表的四种方法 链表结构图一 链表结构图二 链表结构图三 链表结构图四 一.静态链表 例1: 附例1代码: #include <stdio.h>typedef ...
- 链表(创建,插入,删除和打印输出
http://www.bianceng.cn/Programming/C/200705/327.htm (以下不全,去此网址看) 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了 ...
- 反转单向链表java_Java实现单向链表反转
本文实例为大家分享了Java实现单向链表反转的具体代码,供大家参考,具体内容如下 1.实现代码 public class LinkedListTest { public static void mai ...
- java集合单向链表_Java实现单向链表数据结构
本文章同步到本人的博客站点 燕归来 链表是一种数据结构,和数组同级.比如,Java中我们使用的ArrayList,其实现原理是数组.而LinkedList的实现原理就是链表了.链表在进行循环遍历时效率 ...
- 判断两个无环单向链表/有环单向链表是否相交,并返回相交节点
题目描述:单链表可能有环,也可能无环.给定两个单链表的头节点 head1 和 head2, 这两个链表可能相交,也可能不相交.请实现一个函数,如果两个链表相交,请返回相交 的第一个节点;如果不相交,返 ...
- c语言用链表对学生成绩排序,学生成绩排序和平均分计算利用c语言链表的创建插入删除.doc...
#define NULL 0 #define LEN sizeof(struct student) struct student { long num; float score; struct stu ...
最新文章
- AMDP + XLSX Workbench 报表开发模式
- 哪些手机支持双wifi?
- 软件工程师安德烈·梅萨加冕 2021 世界小姐冠军
- HTML资源嗅探,scrapy-2 嗅探网站,解析HTML
- 分布式常见面试题详解
- 极域电子教室加密狗怎么激活
- 二叉树前中后序遍历(循环实现)
- 2.1.5 物理路径泄漏_最新的泄漏的Windows 8.1 Build显示出继续关注波兰语和改进功能...
- 视频监控客户端-GB28181之转码库-转码格式支持H265、H264、MPEG4、MPEG2
- Python中常见字符串去除字符串空格的方法
- 现今活跃在信息技术领域的卓越作者--张亚飞新作上市
- 新技能get,微信提现这样操作可免手续费
- 几十个炫酷可视化数据分析网站你值得拥有
- 反思:项目开发中的语言沟通与文档沟通
- C#读写修改设置调整UVC摄像头画面-伽玛
- NGINX-RTMP 直播服务部署
- 传智播客.Net视频
- 6-Python数字和列表
- 求解矩形的面积,求解梯形的面积
- vue14 动画-自学视频
热门文章
- 2017年07月03号课堂笔记
- 2016年,我的和自己谈谈
- Python补充06 Python之道
- 《计算机组成与体系结构:性能设计》读后小记 6、外部存储器
- Tornado/Python 学习笔记(一)
- ceph rgw java_ceph rgw multisite基本用法
- c free语言自定义函数,C 语言free函数的工作原理
- linux 进程与锁,linux 中的进程与锁
- C语言作业二选择结构,C语言第二次作业参考答案选择结构.pdf
- php数组转为js json,javascript-将数组php转换为JSON时出错