file-type

C++实现单链表操作

TXT文件

下载需积分: 9 | 6KB | 更新于2024-09-11 | 32 浏览量 | 1 下载量 举报 收藏
download 立即下载
"这篇资源是关于单链表的C++实现,作者自编了单链表的算法,并希望得到技术上的指导。" 在计算机科学中,链表是一种基础的数据结构,用于存储一系列有序的元素。单链表是链表的一种形式,其中每个节点包含数据以及一个指向下一个节点的指针。在提供的代码中,定义了一个名为`SLNode`的结构体,表示链表的节点,含有一个整型数据成员`data`和一个指向下一个节点的指针`next`。`SLNode`类提供了两个构造函数,一个无参构造函数初始化`next`为`NULL`,另一个带参构造函数用于设置数据和下一个节点。 接着,定义了一个名为`SLList`的类来操作单链表。这个类包含私有成员变量:头节点`head`、当前节点`currptr`、临时节点`now`以及链表长度`size`。`SLList`类提供了多种方法,如检查链表是否为空、获取链表长度、查找元素、删除节点、插入元素以及显示链表内容等。 `SLList`类的构造函数有默认构造函数和带参数的构造函数。默认构造函数创建一个空链表,而带参数的构造函数接收一个整数`item`,用以在链表头部插入新节点。析构函数负责释放链表的所有节点,避免内存泄漏。 类中的其他方法包括: - `IsEmpty`:判断链表是否为空,如果`head->next`为`NULL`,则链表为空。 - `length`:返回链表的长度,即`size`的值。 - `Find`:查找指定整数`k`在链表中的位置,返回一个布尔值表示是否找到。 - `Findnow`和`Findcurrent`:可能用于查找当前节点或特定条件的节点。 - `Search`:查找指定元素并返回其位置,如果不存在则返回-1。 - `pre`:可能用于移动当前节点到前一个节点。 - `Deletehead`:删除头节点并更新头节点,返回一个布尔值表示操作是否成功。 - `Deletenow`和`Deletelast`:删除当前节点或尾部节点,同样返回布尔值表示操作结果。 - `Insertlast`和`Inserttop`:在链表末尾或开头插入新元素。 - `Insertnow`:在指定位置插入新元素。 - `display`:显示链表的所有元素。 这段代码展示了如何使用C++实现基本的单链表操作,包括插入、删除和查找等。这对于理解链表数据结构和学习数据结构基础非常有帮助。

相关推荐

filetype
#include<iostream> using namespace std; enum yaya { error,success }; struct node { int data; node*next; }; class List{ public: List(); ~List(); int length(); yaya set_data(int n); node* get_ptr(int m); yaya inset_node(int x,int y); int delete_node(int i); void put_in(int x); void breaktwo(List&la,List&lb); void same_data(List&l1,List&l2,List&l); int out_data(); private: int count; node* head; }; List::List(){ head=new node; head->next=NULL; count=0; } int List::length(){ return count; } yaya List::set_data(int n){ node*p=head; for(int j=0;j<n;j++){ cin>>p->data; p=p->next; count++; if(p==NULL){ return error; } } return success; } node* List::get_ptr(int m){ node*p=head; int j=0; while(p!=NULL&&j<m){ j++; p=p->next; } return p; } yaya List::inset_node(int x,int y){ if(x<=0||x>count+1){ return error; } node*p=new node; p->data=y; node*current=head; for(int j=1;j<x;j++){ current=current->next; } p->next=current->next; current->next=p; count++; return success; } int List::delete_node(int i){ if(i<=0||i>count) return NULL; node*current=head; for(int j=1;j<i;j++){ current=current->next; }node*u=current->next; current->next=u->next; delete u; count--; return success; } void List::put_in(int x){ node*p=new node; p->data=x; node*current=head; for(;current!=NULL&¤t->next!=NULL&¤t->next->data<x;){ current=current->next; } p->next=current->next; current->next=p; count++; return; } void List::breaktwo(List& la,List& lb){ node*q=head->next; la.inset_node(la.count+1,q->data); while(q!=NULL&&q->next!=NULL&&q->next->next!=NULL){ q=q->next->next; la.inset_node(la.count+1,q->data); } node*w=head->next->next; lb.inset_node(lb.count+1,w->data); while(w!=NULL&&w->next!=NULL&&w->next->next!=NULL){ w=w->next->next; lb.inset_node(lb.count+1,w->data); } } void List::same_data(List&l1,List&l2,List&l){ node*p=l1.head; for(int i=1;i<=l1.count;i++){ p=p->next; node*q=l2.head; for(int j=1;j<=l2.count;j++){ q=q->next; if(p->data==q->data) l.inset_node(l.length()+1,p->data); } } } int List::out_data(){ node*p=head; for(int j=1;j<=count;j++){ p=p->next; cout<<(p->data)<<" "; } cout<<endl; return 0; } List::~List(){ node*p=head,*s; while(p!=NULL){ s=p; p=p->next; delete s; } }
越爱
  • 粉丝: 0
上传资源 快速赚钱