实现功能:
1、单链表i的创建(头插法与尾插法)
2、单链表的元素插入
3、单链表元素的删除
4、单链表中固定位置元素的获取
5、寻找单链表与给定数字相同的元素位置
6、获取单链表的长度
7、展示整个链表的元素
#include<bits/stdc++.h>
using namespace std;
struct Node
{
int data;
Node *next;
};
class Linklist
{
private:
Node *Head;
public:
Linklist();
void CreatheadList();//头插法创建链表
void CreathailList();//尾插法创建链表
void Insert();//插入元素
int Delete();//删除表中元素
int GetData();//取得表中元素
int Search();//在表中寻找匹配项
int ListLength();//获得表中的长度
void Display();//展示整个链表
};
Linklist::Linklist()
{
Head=new Node;
Head->next=NULL;
}
void Linklist::CreatheadList()//头插法创建链表
{
int n;
cout<<"请输入链表元素个数:";
cin>>n;
Node *p;
Node *temp;
p=Head;
cout<<"请输入"<<n<<"个链表的值:";
for(int i=0;i<n;i++)
{
temp=new Node;
cin>>temp->data;
temp->next=p->next;
p->next=temp;
}
Display();
}
void Linklist::CreathailList()//尾插法创建链表
{
cout<<"请输入链表元素个数:";
int n;
cin>>n;
Node *p;
Node *temp;
p=Head;
cout<<"请输入"<<n<<"个链表的值:";
for(int i=0;i<n;i++)
{
temp=new Node;
cin>>temp->data;
p->next=temp;
p=temp;
}
Display();
}
void Linklist::Insert()//在i处插入e
{
int i,e;
cout<<"请输入在何处插入元素:";
cin>>i;
cout<<"请输入插入元素为:";
cin>>e;
Node *temp;
temp=Head;
int j=0;
while(temp&&j<i-1)
{
temp=temp->next;
j++;
}
if(!temp||j>i-1)
{
cout<<"插入位置错误";
return;
}
else
{
Node *s;
s=new Node;
s->data=e;
s->next=temp->next;
temp->next=s;
}
Display();
}
int Linklist::Delete()//删除i处的元素
{
int i;
cout<<"请输入删除何处的元素:";
cin>>i;
Node *temp;
temp=Head;
int j=0;
while(temp&&j<i-1)
{
temp=temp->next;
j++;
}
if(!temp||j>i-1)
{
cout<<"删除位置错误"<<endl;
return 0;
}
else
{
Node *s;
s=temp->next;
temp->next=s->next;
delete s;
}
Display();
}
int Linklist::GetData()//得到i处的元素
{
int i;
cout<<"请输入得到何处的元素:";
cin>>i;
Node *temp;
temp=Head;
int j=0;
while(temp&&j<i-1)
{
temp=temp->next;
j++;
}
if(!temp||j>i-1)
{
cout<<"寻找位置错误"<<endl;
return 0;
}
else
{
cout<<i<<"处的元素为:"<<temp->next->data<<endl;
// return temp->data;
}
}
int Linklist::Search()//寻找链表中有无该元素
{
int obj;
cout<<"请输入要查找的元素:";
cin>>obj;
int j=1;
Node *temp;
temp=Head->next;
while(temp&&temp->data!=obj)
{
temp=temp->next;
j++;
}
if(temp==NULL)
{
cout<<"链表中无此元素"<<endl;
return 0;
}
else
{
cout<<"在该链表中第"<<j<<"个元素等于"<<obj<<endl;
}
return j;
}
int Linklist::ListLength()//计算链表的长度
{
Node *temp;
temp=Head->next;
int j=1;
while(temp)
{
temp=temp->next;
j++;
}
cout<<"该链表的长度为:"<<j-1<<endl;
return j;
}
void Linklist::Display()//输出链表的元素
{
Node *temp;
temp=Head->next;
cout<<"该链表的元素依次为";
while(temp)
{
int e=temp->data;
cout<<e<<" ";
temp=temp->next;
}
cout<<endl;
}
int main()
{
Linklist headlist;
Linklist haillist;
int temp;
while(1)
{
cout<<"请选择链表生成方法:";
cin>>temp;
if(temp==1)
{
headlist.CreatheadList();
headlist.Insert();
headlist.GetData();
headlist.Search();
headlist.Delete();
headlist.ListLength();
}
else
{
haillist.CreatheadList();
haillist.Insert();
haillist.GetData();
haillist.Search();
haillist.Delete();
haillist.ListLength();
}
}
system("pause");
return 0;
}