单链表的基本操作
# include <iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode*next;
}LNode,*LinkList;
int InitList(LinkList &l)//初始化单链表
{
l = new LNode;
l->next = NULL;
return 1;
}
void CreateList(LinkList &l,int n)//前插法创建单链表
{
LinkList p;
l = new LNode;
l->next = NULL;
for(int i=0;i<n;i++)
{
p = new LNode;
cin>>p->data;
p->next = l->next;
l->next = p;
}
}
void CreateList1(LinkList &l,int n)//后插法建立单链表
{
LinkList p,q;
l = new LNode;
l->next = NULL;
p=l;
for(int i=0;i<n;i++)
{
q=new LNode;
cin>>q->data;
q->next = NULL;
p->next = q;
p = p->next;
}
}
void ListShow(LinkList &l)//链表输出
{
LinkList p;
for(p=l->next;p;p=p->next)
{
cout<<p->data<<" ";
}
cout<<endl;
}
int GetElem(LinkList &l,int i,int e)//从链表中获取第i个元素
{
int j;
LinkList p;
for(j=1,p=l->next;p&&(j<i);j++,p=p->next);
e = p->data;
return e;
}
LinkList LocateElem(LinkList &l,int e)//从链表中查找e
{
LinkList p;
for(p=l->next;p&&p->data!=e;p=p->next);
return p;
}
void ListInsert(LinkList &l,int i)//向链表中插入数据元素
{
int j;
LinkList p,s;
for(j=1,p=l->next;p&&(j<i-1);p=p->next,j++);
if((j>i+1)||!p)
{
cout<<"出现错误"<<endl;
}
s = new LNode;
cin>>s->data;
s->next=p->next;
p->next=s;
}
void ListDelete(LinkList &l,int i)//删除链表的第i个元素
{
int j;
LinkList p,q;
for(j=1,p=l->next;p&&(j<i-1);j++,p=p->next);
if(!p||(j>i-1))
{
cout<<"出现错误"<<endl;
}
q=p->next;
p->next=q->next;
delete q;
}
main()
{
int e;
LinkList l,p;
/*CreateList(l,5);
ListShow(l);*/
cout<<"请输入五个元素"<<endl;
CreateList1(l,5);
ListShow(l);
cout<<GetElem(l,1,e)<<endl;
p = LocateElem(l,1);
cout<<p->data<<endl;
cout<<"请输入需要插入的数据元素"<<endl;
ListInsert(l,3);
ListShow(l);
cout<<"删除链表的第三个元素"<<endl;
ListDelete(l,3);
ListShow(l);
}