c++利用类进行单链表的插入,删除,清空操作
#if 1 #include <iostream>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <string> using namespace std; //类
class List
{
public:
//构造器初始化,生成头节点
List()
{
head = new Node;
head->next=NULL;
} //成员函数
void createList();
void insertList(int data);
void travelList();
void input();
int addNode();
void deleteData(int addNum);
void ifClear();
void clearList();
private:
//数据成员
struct Node
{
int data; //数据域
struct Node * next; //指针域 } * head;//头指针 int num;//链表元素个数
}; //头插法生成节点
void List::insertList(int data)
{
Node * cur=new Node; //插入数据
cur->data=data; //插入节点
cur->next =head->next;
head->next=cur;
} //调用insertList输入数据,生成链表
void List::input()
{
cout<<"请输入链表数量长度:";
cin >>num;
srand(time(NULL));
for(int i=0;i<num;i++)
{
insertList(rand()%100);
}
} //任意位置插入节点
int List::addNode()
{
int d,idx; cout<<"请输入你要插入的节点数据:";
cin >>d;
cout<<"请输入你要插入的节点位置: ";
cin >>idx; Node *tp=NULL;
Node *link=head; //寻找插入位置
if(idx<1||idx>num+1)
cout<<"操作非法"<<endl;
else
{
for(int i=0;i<idx;i++)
{
tp=link;
link=link->next;
} Node *cur=new Node;
tp->next=cur;
cur->data=d;
cur->next=link;
travelList();
return ++num;
}
} //遍历链表并将数据存入文件
void List::travelList()
{
ofstream mycout("D:/text.txt");
Node *temp = head->next; //防止头指针地址改变
while(temp != NULL)
{
cout<<temp->data<<" ";
mycout<<temp->data<<" ";
temp=temp->next;
}
mycout.close();
cout<<endl;
} //删除节点
void List::deleteData(int addNum)
{
int i,j=0;
cout<<"请问您要删除第几个数据: ";
cin >>i;
Node *tp=NULL;
Node *link=head;//link为删除节点后面的一个节点,temp为删除节点 if(addNum<i||i<0)
cout<<"操作非法!!"<<endl;
else
{
while(link->next)
{
tp=link->next; //第一个节点
j++;
if(i==j) //找的删除的节点
{
link->next=tp->next;
delete tp;
break;
}
link=link->next;
}
travelList();
} } //清空链表
void List::clearList()
{
Node *tp = NULL;
Node *ph=head->next; while(head->next)
{
tp=ph;
ph=ph->next;
delete tp;
head->next=ph;
} travelList();
cout<<endl;
} //询问是否清空
void List::ifClear()
{
string i; if(!head->next)
{
cout<<"链表已清空!!!"<<endl;
} else
{
cout<<"是否清空链表(是/否):";
cin>>i; if(i=="是")
{
clearList();
cout<<"链表清空完成!!!"<<endl;
}
else
cout<<"链表未清空!!!"<<endl;
}
} void main()
{
//初始化,生成头节点
List list; //输入链表长度
list.input(); //遍历链表,并存入文件
list.travelList(); //添加节点并返回总结点数
int addNum=list.addNode(); //删除节点
list.deleteData(addNum); //是否清空链表
list.ifClear(); system("pause"); }
#endif
c++利用类进行单链表的插入,删除,清空操作的更多相关文章
- 单链表的插入删除操作(c++实现)
下列代码实现的是单链表的按序插入.链表元素的删除.链表的输出 // mylink.h 代码 #ifndef MYLINK_H #define MYLINK_H #include<iostream ...
- 面试之路(10)-BAT面试之java实现单链表的插入和删除
链表的结构: 链表在空间是不连续的,包括: 数据域(用于存储数据) 指针域(用于存储下一个node的指针) 单项链表的代码实现: 节点类 构造函数 数据域的get,set方法 指针域的get,set方 ...
- C语言实现单链表节点的删除(带头结点)
我在之前一篇博客<C语言实现单链表节点的删除(不带头结点)>中具体实现了怎样在一个不带头结点的单链表的删除一个节点,在这一篇博客中我改成了带头结点的单链表.代码演示样例上传至 https: ...
- 数据结构与算法之PHP实现链表类(单链表/双链表/循环链表)
链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链表. 链表分为单链表.双链表.循环链表. 一.单链表 插入:链表中插入一个节点的效率很高.向链表中插 ...
- 【线性表基础】顺序表和单链表的插入、删除等基本操作【Java版】
本文表述了线性表及其基本操作的代码[Java实现] 参考书籍 :<数据结构 --Java语言描述>/刘小晶 ,杜选主编 线性表需要的基本功能有:动态地增长或收缩:对线性表的任何数据元素进行 ...
- 单链表创建、删除、查找、插入之C语言实现
本文将详细的介绍C语言单链表的创建.删除.查找.插入以及输出功能 一.创建 #include<stdio.h> #include<stdlib.h> typedef int E ...
- 【剑指offer】单链表尾部插入一个节点
#include <iostream> using namespace std; //链表结构体 struct ListNode { int m_Value; ListNode *next ...
- 单链表的插入伪算法和用C语言创建单链表,并遍历
非循环单链表插入结点伪算法讲解 q插入p之后的伪算法:第一种表示方法:r = p->pNext; // p->pNext表示的是所指向结点的指针域,指针域又是指向下一个结点的地址p-> ...
- Linux C++ 单链表添加,删除,输出,逆序操作
/*单链表操作*/#include <iostream>using namespace std; class Node{ public: Node(){ next=0; } Node(in ...
随机推荐
- 【转】解决Android 6.0 NoSuchContextException 和WEBVIEW_undefined 的问题
在 Android 4.4 操作系统上测试混合应用时,可以直接顺利的在native模式和webview模式之间切换,但是在Android6.0 操作系统上却报NoSuchContextExceptio ...
- 8.3 GOF设计模式二: 适配器模式 Adapter
GOF设计模式二: 适配器模式 Adapter 为中国市场生产的电器,到了美国,需要有一个转接器才能使用墙上的插座,这个转接 器的功能.原理?复习单实例模式 SingleTon的三个关键点 ...
- js的call和apply区别
call和apply都是改变了this的指针. obj.call(newObj, arg1, arg2, ...); obj.apply(newObj, [arg1, arg2, ...]); 上面的 ...
- linux环境下安装使用selenium Chrome
安装驱动 http://chromedriver.storage.googleapis.com/index.html 下载对应chrome浏览器版本的驱动程序 chmod +x chromedrive ...
- nginx插入lua脚本访问redis
目标:收集用户日志 流程: 浏览器端get方法将数据传到nginx服务 nginx收集到数据,执行内嵌lua脚本,访问redis,根据token获得用户id 将日志信息存入文件 1.nginx安装,参 ...
- linux命令:使用less从后向前查看日志信息
线上出问题的时候,我们常用tail-n 或者tail-f或者grep或者vicat等各种命令去查看异常信息,但是日志是在不停地刷屏,tail是动态的在变的,我们往往期望从日志最后一行往前一页一页的翻页 ...
- rsyslog及loganalyzer
日志:历史日志 历史事件: 时间记录,事件的关键性程度,loglevel 系统日志服务: syslogd,守护进程 syslogd:system klogd:kernel rsyslog: sys ...
- Cognos命名空间不可用
1. 问题描述 启动Cognos失败,报错代码为0146. 2. 问题分析 namespace 配置有问题,检查configuration 3. 解决方案 如果检查不出问题,删除$COGNOS_HOM ...
- Tensorflow搭建卷积神经网络识别手写英语字母
更新记录: 2018年2月5日 初始文章版本 近几天需要进行英语手写体识别,查阅了很多资料,但是大多数资料都是针对MNIST数据集的,并且主要识别手写数字.为了满足实际的英文手写识别需求,需要从训练集 ...
- 开源HUSTOJ
hustoj -- 请一定认真看完本页再动手安装,以免无谓的折腾!====== 根据你选择的发行版不同,从下面三个脚本里选一个来用. <b>不要相信百度来的长篇大论的所谓教程,那些都是好几 ...