C++ 链表

之前一直没怎么在意C++中的链表,但是突然一下子让自己写,就老是出错。没办法,决定好好恶补一下该方面的知识,也为今后的数据结构大下个良好的基础,于是我总结出以下几点,有些地方可能不正确,还望大家不吝赐教,旨在共同进步。
总结:
1、链表List的基本单元是节点Node,因此想要操作方便,就必须为每一步打好基础,Node的基本结构如下:
class Node{
public:
int data;
Node *next;
Node(int da=0,Node *p=NULL){
this->data=da;
this->next=p;
}
};
我们可以看出,Node的成员变量一共有两个,都是public,因为我们要对这两个变量进行操作,所以不能是private类型的。然后是一个构造函数,第二个参数默认值为NULL,也就是说如果我们创建新节点时只指定第一个参数,而不写第二个参数,那么它默认的就是NULL,以这种方式可以更灵活的使用Node,个人建议这么使用哦。
2、第二步就是创建我们的链表了,同样我们这里先给出链表的代码,在进行一一的解释。
class List{
private:
Node *head,*tail;
int position;
public:
List(){head=tail=NULL;};
~List(){delete head;delete tail;};
void print();
void Insert(int da=0);
void Delete(int da=0);
void Search(int da=0);
};
我们这里面有两个数据类型,一个是Node。另一个是指代节点位置的成员变量(起不到什么作用,且不去管它吧)。使用head和tail来命名便是为了见名知意,使操作更加准确。然后是重要的六个函数,各自的功能不言而喻咯,其实最重要的是在每一个函数中我们都默认能操作head和tail两个成员变量,这样能简化我们的参数列表,使得函数更加优雅。
下面是我的一个单链表的实现,包含创建链表,插入值,删除特定的值,查找特定值得在链表中的位置。
#include<iostream>
using namespace std;
class Node{
public:
int data;
Node *next;
Node(int da=0,Node *p=NULL){
this->data=da;
this->next=p;
}
};
class List{
private:
Node *head,*tail;
int position;
public:
List(){head=tail=NULL;};
~List(){delete head;delete tail;};
void print();
void Insert(int da=0);
void Delete(int da=0);
void Search(int da=0);
int getValueAt(int position);
void setValueAt(int position,int da);
};
int List::getValueAt(int position){
Node *p=head;
if(p==NULL){
cout<<"The List is Empty!"<<endl;
}else{
int posi=0;
while(p!=NULL&&posi!=position){
posi++;
p=p->next;
}
if(p==NULL){
cout<<"There is no value of this position in this List!"<<endl;
}else{
cout<<"In this Position,the value is"<<p->data<<endl;
}
}
return p->data;
}
void List::setValueAt(int position,int da){
Node *p=head;
if(p==NULL){
cout<<"The List is Empty!"<<endl;
}else{
int posi=0;
while(p!=NULL&&posi!=position){
posi++;
p=p->next;
}
if(p==NULL){
cout<<"There is No Position in this List!"<<endl;
}else{
p->data=da;
cout<<"The Value in this position has been Updated!"<<endl;
}
}
}
void List::Search(int da){
Node *p=head;
if(p==NULL){
cout<<"Sorry, The List is Empty!"<<endl;
return;
}
int count=0;
while(p!=NULL&&p->data!=da){
p=p->next;
count++;
}
cout<<"the value you want to search is at position %d"<<count<<endl;
}
void List::Delete(int da){
Node *p=head,*q=head;
if(p==NULL){
cout<<"Sorry, The List is Empty!"<<endl;
return;
}
while(p!=NULL&&p->data!=da){
q=p;
p=p->next;
}
q->next=p->next;
cout<<"The Deletion Operation had been finished!"<<endl;
}
void List::Insert(int da){
if(head==NULL){
head=tail=new Node(da);
head->next=NULL;
tail->next=NULL;
}else{
Node *p=new Node(da);
tail->next=p;
tail=p;
tail->next=NULL;
}
}
void List::print(){
Node *p=head;
while(p!=NULL){
cout<<p->data<<" \a";
p=p->next;
}
cout<<endl;
}
int main(){
cout<<"Hello World!"<<endl;
List l1;
l1.Insert(1);
l1.Insert(2);
l1.Insert(3);
l1.Insert(4);
l1.Insert(5);
l1.Insert(6);
l1.Insert(7);
l1.print();
l1.Search(4);
l1.Delete(6);
l1.print();
l1.getValueAt(3);
l1.setValueAt(3,9);
l1.print();
cout<<"The End!"<<endl;
return 0;
}
//在此我想解释的是,之所以数字4在链表中的位置为3,是因为其是从零开始计数的
下面是代码运行后的结果:
好了,单链表的基本操作大致就是这样了,希望我们都能从中有所收获。如果您发现代码中有什么错误,还望不吝赐教,让我们共同进步吧。
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# C++
# 链表
# 链表实例详解
# 链表如何实现
# C++数据结构之链表的创建
# C++数据结构与算法之反转链表的方法详解
# C++数据结构与算法之判断一个链表是否为回文结构的方法
# C++ 数据结构之kmp算法中的求Next()函数的算法
# C++数据结构之链表详解
# 不吝赐教
# 第二个
# 还望
# 共同进步
# 的是
# 都是
# 是一个
# 我想
# 如果您
# 是因为
# 好了
# 第一个
# 让我们
# 在此
# 都能
# 中有
# 不去
# 没办法
# 这两个
相关文章:
如何通过二级域名建站提升品牌影响力?
如何在腾讯云免费申请建站?
定制建站策划方案_专业建站与网站建设方案一站式指南
招贴海报怎么做,什么是海报招贴?
Swift中swift中的switch 语句
如何在IIS管理器中快速创建并配置网站?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
怎么将XML数据可视化 D3.js加载XML
建站VPS配置与SEO优化指南:关键词排名提升策略
建站之星ASP如何实现CMS高效搭建与安全管理?
教程网站设计制作软件,怎么创建自己的一个网站?
如何在云服务器上快速搭建个人网站?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
建站OpenVZ教程与优化策略:配置指南与性能提升
如何快速搭建FTP站点实现文件共享?
美食网站链接制作教程视频,哪个教做美食的网站比较专业点?
制作充值网站的软件,做人力招聘为什么要自己交端口钱?
红河网站制作公司,红河事业单位身份证如何上传?
如何选择域名并搭建高效网站?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?
Java解压缩zip - 解压缩多个文件或文件夹实例
魔毅自助建站系统:模板定制与SEO优化一键生成指南
移民网站制作流程,怎么看加拿大移民官网?
智能起名网站制作软件有哪些,制作logo的软件?
如何在建站之星绑定自定义域名?
建站一年半SEO优化实战指南:核心词挖掘与长尾流量提升策略
如何选择高效可靠的多用户建站源码资源?
专业网站制作企业网站,如何制作一个企业网站,建设网站的基本步骤有哪些?
MySQL查询结果复制到新表的方法(更新、插入)
如何在西部数码注册域名并快速搭建网站?
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
h5网站制作工具有哪些,h5页面制作工具有哪些?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
如何规划企业建站流程的关键步骤?
岳西云建站教程与模板下载_一站式快速建站系统操作指南
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何在建站主机中优化服务器配置?
上海网站制作开发公司,上海买房比较好的网站有哪些?
电商平台网站制作流程,电商网站如何制作?
如何通过WDCP绑定主域名及创建子域名站点?
Android自定义控件实现温度旋转按钮效果
如何在橙子建站中快速调整背景颜色?
linux top下的 minerd 木马清除方法
javascript中对象的定义、使用以及对象和原型链操作小结
公司门户网站制作流程,华为官网怎么做?
实惠建站价格推荐:2025年高性价比自助建站套餐解析
网站设计制作公司地址,网站建设比较好的公司都有哪些?
建站之星后台密码遗忘?如何快速找回?
*请认真填写需求信息,我们会在24小时内与您取得联系。