//2. 单链表
#include<iostream>
#define elemtype int
using namespace std;
class link
{ public:
elemtype data;
link *next;};
link *hcreat()
{ link *s,*p;
elemtype i;
p=new link;
p->next=NULL;
cout<<"输入多个结点数值,以空格为间隔,以0为终止符"<<endl;
cin>>i;
while(i)
{ s=new link;
s->data=i;
s->next=p->next;
p->next=s;
cin>>i;}
return p;}
void print(link *head)
{ link *p;
p=head->next;
while(p->next!=NULL)
{ cout<<p->data<<"->";
p=p->next;}
cout<<p->data<<endl;}
link *Locate(link *head,elemtype x)
{ link *p;
p=head->next;
while((p!=NULL)&&(p->data!=x))
p=p->next;
return p;}
void deletel(link *head,elemtype x)
{ link *p,*q;
q=head;
p=head->next;
while((p!=NULL)&&(p->data!=x))
{ q=p;
p=p->next;}
if(p==NULL)
cout<<"要删除的结点不存在!";
else{ q->next=p->next;
delete(p);}}
void insert(link *head,elemtype x,elemtype y)
{ link *p,*s;
s=new link;
s->data=y;
if(head->next==NULL)
{ head->next=s;
s->next=NULL;}
p=Locate(head,x);
if(p==NULL)
cout<<"插入位置非法!";
else
{ s->next=p->next;
p->next=s;}}
void change(link *p,elemtype x,elemtype y)
{ link *q;
q=p->next;
while(q!=NULL)
{ if(q->data==x)
q->data=y;
q=q->next;}}
int main()
{ int n;
elemtype x,y;
link *p,*q;
p=hcreat();
print(p);
cout<<"请输入要删除的元素:";
cin>>y;
deletel(p,y);
print(p);
cout<<"请输入插入位置的元素值(将待插元素插入到它的后面):";
cin>>x;
cout<<"请输入代插元素值:";
cin>>y;
insert(p,x,y);
print(p);
cout<<"请输入要修改前,后的元素值:";
cin>>x>>y;
change(p,x,y);
print(p);
return 0;}
评论0