代码主体使用结构体+类+模板进行实现。

1.LinkList.h

//LinkList.h
#pragma once
#include<iostream>
using namespace std;
template<class T>
struct Node   //结点结构
{T data;   //结点数据域Node*link;//指针域Node() { link = NULL; }Node(T e, Node *next = NULL){data = e;link = next;}
};
template<class T>
class LinkList     //带表头结点的单链表类
{private:Node<T> *head;              //链表指针
public:LinkList();    //构造带表头结点的空单链表LinkList(T data[], int  mSize);//构造有mSize个元素的单链表~LinkList() { Clear(); }            //析构函数bool Insert(int pos, const T&x);   //在单链表第pos个元素前插入元素xbool Remove(int pos, T&x);    //删除单链表第pos个元素bool Replace(int pos, const T&x);  //将修改单链表第pos个元素为xint Length()const;      //求表长等不改变数据值,只是读取建议使用常函数const末尾标识bool IsEmpty() const;  //判空操作void Clear();        //清空操作void Output() const;    //输出链表bool search(const T&x) const;//查找元素x在表中是否存在
};

3单链表.cpp

//单链表.cpp
#include"LinkList.h"
#include<iostream>
using namespace std;
template<class T>
LinkList<T>::LinkList() {//初始化链表head = new Node<T>;head->link = NULL;
}
template<class T>
LinkList<T>::LinkList(T data[], int mSize) {//初始化链表元素head = new Node<T>;head -> link = NULL;head->data = data[0];Node < T> *end = head;for (int  i = 0; i < mSize; i++){Node<T> *p = new Node<T>;p->data = data[i];p->link = NULL;end->link = p;end = p;}
}
template<class T>
bool LinkList<T>::Insert(int pos,  T&x) {//插入元素int cont = 1;Node<T>*p = head;//初始指向头节点bool flag = false;//初始flag为falsewhile (p != NULL && cont <= pos - 1){if (cont == pos - 1)//如果p在目标节点处{Node<T> *add = new Node<T>;//增加节点addadd->data = x;//新增节点数据域设为xadd->link = p->link;//指针域指向原来p所指向的位置p->link = add;//p重新指向add新增节点flag = true;break;}else {//如果没到目标节点,指针一直移动并且计数器++cont++;p = p->link;}}return flag;
}
template<class T>
bool LinkList<T>::Remove(int pos,  T&x)//删除元素
{int cont = 1;Node<T> *p = head;//p指向头节点bool flag = false;while (p!=NULL&&cont<=pos-1){if (cont == pos - 1){Node<T> *del = p->link;p->link=p->link->link;//删除节点(2)后p指向初始节点(1)后面(2)的后面那个元素(3)x = del->data;delete del;flag = true;break;}else{cont++;p = p->link;}}return flag;
}
template<class T>
bool LinkList<T>::Replace(int pos,  T&x)//修改元素
{int cont = 1;Node<T>* p = head;bool flag = false;while (p != NULL && cont <= pos){if (cont == pos){p->data = x;flag = true;}else{cont++;p = p->link;}}return flag;
}
template<class T>
int LinkList<T>::Length()const//求表长
{int cont = 0;Node<T>*p = head;while (p != NULL){cont++;p = p->link;}return cont;
}
template<class T>
void LinkList<T>::Clear() {//清空链表if (head != NULL) {Node<T> *p;p = head->link;while(p != NULL) {Node<T> *del = p;p = p->link;delete del;}head = NULL;}
}template<class T>
bool LinkList<T>::IsEmpty()const//判空
{return head == NULL;//HEAD为空则返回true
}template<class T>
bool LinkList<T>::Search(const T&x)const//查询
{bool flag = false;Node<T>*p = head;while (p!=NULL){if (p->data == x){flag = true;break;}else{p = p->link;}}return flag;
}template<class T>
void LinkList<T>::OutPut()const//输出链表
{Node<T> *p = head;int cont = 0;while (p != NULL)\{cout << p->data << ",";p = p->link;cont++;if (cont % 10 == 0){cout << endl;}}cout << endl;
}

3.测试.cpp

//测试.cpp
#include"单链表.cpp"
#include<ctime>
void menu()//模拟菜单选项
{cout << "********************************************************" << endl;cout << "*            1 ------------输出链表                                                                      *" << endl;cout << "*            2 ------------插入元素                                                                      *" << endl;cout << "*            3 ------------删除元素                                                                      *" << endl;cout << "*            4 ------------销毁链表                                                                      *" << endl;cout << "*            5 ------------查找                                                                               *" << endl;cout << "*            0 ------------退出系统                                                                      *" << endl;cout << "********************************************************" << endl;
}
const int N = 20;
int main()
{srand((unsigned)time(NULL));//以系统当前时间初始化随机数发生器int data[N];for (int i = 0; i < N; i++)data[i] = rand() % 100;//用随机数发生器产生100以内的整数LinkList<int> L(data, N);//创建N个元素的单链表menu();while (1)  //模拟菜单工作方式{int select;cout << "请输入您的选择:";cin >> select;switch (select){case 1:        //输出单链表if (L.IsEmpty()){cout << "链表为空!" << endl;}elseL.OutPut();break;case 2:       //插入int pos, elem;cout << "请输入插入位置:";cin >> pos;cout << "插入元素:";cin >> elem;if (L.Insert(pos, elem))     //插入成功cout << "在第" << pos << "个元素前成功插入" << elem << endl;else   //插入失败cout << "插入位置不合法!" << endl;break;case 3:       //删除cout << "请输入删除位置:";    cin >> pos;int x;if (L.Remove(pos, x))//删除单链表的第pos个元素cout << "单链表的第" << pos << "个元素" << x << "已被删除。" << endl;elsecout << "删除位置不合法!" << endl;break;case 4:       //销毁链表char OK;cout << "确定要销毁链表吗?(y/n)" << endl;cin >> OK;if (OK == 'y' || OK == 'Y')    L.Clear();break;case 5:       //查找cout << "请输入查找元素:";cin >> elem;if (L.Search(elem))cout << "查找成功!" << endl;elsecout << "查找失败!" << endl;break;case 0:       //退出exit(0);default:cout << "您输入的选项有误,请重新输入:";}}return 0;
}

4.运行截图

【数据结构】单链表基本操作(C++实现)相关推荐

  1. 数据结构-单链表基本操作-C语言代码

    单链表基本操作 1.头插法建立单链表 2.尾插法建立单链表 3.查找结点 3.修改结点 4.插入结点 5.删除结点 本篇只有c语言代码,具体思路讲解请看这篇博客:数据结构-线性结构-单链表 1.头插法 ...

  2. 数据结构-单链表基本操作(C语言实现)

    参考书:王道考研数据结构 (此贴为博主学习408的笔记,因博主也是学习者,个人总结如有错误欢迎指正.如有侵权请告知,马上删除致歉)​​ 单链表定义 单链表是线性表的链式存储,通过一组任意的存储单元来存 ...

  3. 数据结构-单链表基本操作带图完整详解

    1.什么是链表 链表是一种物理存储结构上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指 针链接次序实现的. 2.为什么要使用链表 在未学习链表时,我们常用的存储数据的方式无非就是数组.使 ...

  4. 数据结构——单链表基本操作的实现

    单链表的基本操作的实现 单链表的初始化 判断链表是否为空 单链表的销毁 清空链表 求链表表长 取单链表中第i个元素的内容 根据指定值获取该值所在的位置(地址) 根据指定值获取该值所在的位置序号 插入元 ...

  5. 数据结构-单链表基本操作

    单链表 文章目录 单链表 通常使用两个类:链表的结点类和链表类,协同表示单链表 1.链表结点类的定义 2.单链表类的定义 3.单链表输入(前插法) 4.单链表的输出 5.删去链表中除表头结点外的所有其 ...

  6. 【数据结构|链表】单链表基本操作

    文章目录 一.链表 二.链表分类 三.单链表基本操作   3.1 单链表存储结构Init   3.2 遍历链表visitlist函数   3.3 求表长length   3.4 查找listfind ...

  7. 【数据结构-C】单链表基本操作及图解分析

    目录 单链表介绍​ 单链表基本操作及图解分析 1.创建一个新结点 2.头插法向单链表中插入结点​ 3. 尾插法向单链表中插入结点​ 4.头删法删除单链表结点​ 5.尾删法删除单链表结点​ 6.返回单链 ...

  8. 搬砖:数据结构之链表基本操作总结

    数据结构之链表基本操作总结 2017年05月11日 18:22:11 Lily_whl 阅读数:19151 https://blog.csdn.net/Lily_whl/article/details ...

  9. 数据结构之链表基本操作

    数据结构:单链表基本操作 单链表学习:参考数据结构:单链表基本操作 涉及到单链表的基本操作有如下: int initList(linkList *); //初始化一个单链表,具有头指针,头结点,头结点 ...

  10. C 语言单链表基本操作

    复习下数据结构,使用 C 语言实现了带头节点的单链表.单链表基本操作有:节点初始化.链表初始化.插入节点.查找节点.删除节点和删除链表等.下面的程序中,list.h 为头文件, 其中包含了上述基本操作 ...

最新文章

  1. SmartImageView框架的使用
  2. Zynq器件的时钟系统
  3. JavaScript之面向对象学习六原型模式创建对象的问题,组合使用构造函数模式和原型模式创建对象...
  4. 为什么Apple建议使用dispatch_once在ARC下实现单例模式?
  5. 虚拟机网络连接模式中桥接模式和NAT模式的区别
  6. html4.0打不开.swf,SecurityError Error 2148 SWF 不能访问本地资源
  7. 一个手机用c网可以打开网站切换到g网就打不开_推荐一些设计师常用网站!!!...
  8. mysql数据库双机备份_MySQL数据库双机热备份
  9. 排序算法,对内存小数据量大的数据排序(一)
  10. 激活 win10 企业版2016长期服务版本
  11. 哈尔滨学计算机编程学校,哈尔滨中小学生编程学校排名
  12. 关于团队协作开发的一些思考
  13. 漫谈微信开放平台一(小程序服务器url设置)
  14. 传中芯国际洽购华虹NEC 双方展开初步谈判
  15. 详情页点击其中图片转换成幻灯片图文模式,图片对应文字。
  16. 谷歌地球坐标_聊聊GIS中常见的地理坐标系统
  17. 单实例oracle ha,单实例和RAC打造的OracleStream
  18. 【bzoj3041】水叮当的舞步
  19. 统计学基于SPSS贾俊平 授课笔记 发布作业 spss19cn 软件下载地址及破解包spss19_10039 下载地址...
  20. 输入法中鲜为人知的自造字输入功能

热门文章

  1. cacti配置流量汇总
  2. linux环境 前端开发环境搭建,Linux运维知识之linux 前端环境搭建
  3. java线程异常终止_java线程莫名异常退出时,如何捕获异常信息
  4. java的cxf的maven_Maven+Spirng+Mybatis+CXF搭建WebService服务
  5. Microsoft JDBC Driver 4.0 for SQL Server
  6. LeetCode简单题目(#235 #237 #242 #257 #258)-5道(树、数字、字符串)
  7. java中有效关键字_java中有效的关键字
  8. 挖矿为什么要用显卡_你知道为什么挖矿用显卡,而不用CPU吗?
  9. Ubuntu Core for Raspberry Pi 使用笔记
  10. 开源GIS(二)——openlayers加载Arcgis和geoserver在线离线切片