C++实现单链表的各项操作
代码如下:
#include <iostream>
using namespace std;
typedef struct LNode //单链表结点构建
{
int data;
struct LNode *next;
}LNode;
void creatlistR(LNode *&C,int a[],int n)//尾插法建表,把数组的值导入表中
{
struct LNode *s,*r;
int i;int leng=0;
C=(LNode*)malloc(sizeof(LNode));//为C指向的头结点开辟空间
C->next=NULL;
r=C;//让r指向头结点
for(i=1;i<n;i++)//逐次开辟新的结点,将数组的值逐次赋给结点的数值域
{
s=(LNode*)malloc(sizeof(LNode));
s->data=a[i];
r->next=s;
r=r->next;
}
r->next=NULL;
}
int lengthenlist(LNode *C)//求表长
{
struct LNode *r;
r=C;
int leng=0;
if(r->next==NULL)
{
return 0;
}
while(r->next!=NULL)//当r指针指向空的时候说明r指针已逐次指向过所有结点,
//指过的次数即为长度
{
r=r->next;
leng=leng+1;
}
return(leng);
}
void findelem(LNode *C)//在表中找所输入的元素并输出它的位置loc
{
struct LNode *p;
int loc=1;
int x;
int leng;
leng=lengthenlist(C);
cout<<'\n'<<"请输入你想找的元素: ";
cin>>x;
p=C;
for(int i=1;i<=leng;i++)
{
if(p->next->data==x)
{
cout<<'\n'<<"你想找的元素的顺序是: ";
cout<<loc;
break;
}
else
{
p=p->next;
loc=loc+1;
}
}
if(loc==leng+1)//如果循环的次数和表长加1相等说明表中没有想找的元素
{
cout<<"none";
}
}
void insert(LNode *&C)//插入元素,在被插元素之前插入
{
int i;
int j;
int e;
int len;
cout<<'\n'<<"请输入你想插入的元素 : ";
cin>>e;
cout<<'\n'<<"请输入你想插入的位置 : ";//表为空时插入位置为0
cin>>i;
len=lengthenlist(C);
struct LNode *m,*r;
m=(LNode*)malloc(sizeof(LNode));//为插入结点开辟空间
m->data=e;
r=C;
if(i<=len)//插入的位置必须小于表长
{
for(j=1;j<i;j++)//通过循环找到要插入的位置
{
r=r->next;
}
m->next=r->next;
r->next=m;
}
else
cout<<"错误";
}
void listdelete(LNode *&C)//删除元素
{
int leng;
leng=lengthenlist(C);
struct LNode *r;
r=C;
int x;
cout<<'\n'<<"请输入你想删除的元素 :";
cin>>x;
for(int i=1;i<=leng;i++)
{
if(r->next->data==x) //若找到元素删除它否则让r指针下滑直到找到它
{
r->next=r->next->next;
break;
}
else
{
r=r->next;
}
}
if(i==leng+1)//i等于表长加1说明表中没有这个元素,空表同样适用
cout<<"表中找不到元素";
}
void printlist(LNode *C)//打印表
{
struct LNode *r;
int i;int e;int len;
r=C;
len=lengthenlist(C);
cout<<'\n'<<"表为 : ";
if(len==0)
{
cout<<"NULL";
}
else
{
for(i=1;i<=len;i++)
{
e=r->next->data;
cout<<'\t'<<e;
r=r->next;
}
}
}
void initlist(LNode *&C)//判空
{
int leng;
leng=lengthenlist(C);
if(leng==0)
{
cout<<"这已经是一个空表了";
}
else
{
struct LNode *r;
r=C;
r->next=NULL;
}
}
int main()
{
int a[5];
int j;
int elem;
for(j=1;j<6;j++)
{
cout<<"请输入表的元素 : ";
cin>>elem;
a[j]=elem;
}
struct LNode LNode;//建立头结点
struct LNode *C;//建立头指针
C=&LNode;//让头指针指向头结点
creatlistR(C,a,6);
printlist(C);
findelem(C);
listdelete(C);
printlist(C);
insert(C);
printlist(C);
initlist(C);
printlist(C);
return 0;
}
运行结果如下: