#include<iostream>
using namespace std;
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L)
{//初始化
L=new LNode;
L->next=NULL;
L->data=0;
return true;
}
bool GetElem(LinkList &L,int i,int &e)
{//取值
LNode *p=L->next;
int j=1;
while(p&&j<i)
{
p=p->next;
j++;
}
if(!p||j>i) return false;
e=p->data;
return true;
}
int LocateElem(LinkList L,int e)
{//查找
LNode *p=L->next;
int j=1;
while(p&&p->data!=e)
{
p=p->next;
j++;
}
if(j>L->data) return false;
return j;
}
bool ListInsert(LinkList &L,int i,int e)
{//插入
LNode *p=L;
int j=0;
while(p&&(j<i-1))
{
p=p->next;
++j;
}
if(!p || j>i-1) return false;
LNode *s;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
bool ListDelete(LinkList &L,int i)
{//删除
LNode*p=L;int j=0;
while((p->next)&&(j<i-1))
{
p=p->next;
++j;
}
if(!(p->next) || (j>i-1)) return false;
LNode *q;
q=p->next;
p->next=q->next;
L->data--;
delete q;
return true;
}
void ClearList(LinkList &L)
{//清空
LNode *p,*q;
p=L->next;
while(p)
{
q=p->next;
delete p;
p=q;
}
L->next=NULL;
}
void CreatList_head(LinkList &L,int n)
{//头插法
L=new LNode;
L->next=NULL;
L->data=0;
cout<<"请输入这"<<n<<"个数:" <<endl;
for(int i=0;i<n;i++)
{
int m;
LNode *p=new LNode;
cin >> m;
p->data=m;
p->next=L->next;
L->next=p;
L->data++;
}
}
void CreatList_end(LinkList &L,int n)
{//尾插法
L=new LNode;
L->next=NULL;
L->data=0;
LNode *r;
r=L;
cout<<"请输入这"<<n<<"个数:" <<endl;
for(int i=0;i<n;i++)
{
int m;
LNode *p=new LNode;
cin >> m;
p->data=m;
p->next=NULL;
r->next=p;
r=p;
L->data++;
}
}
int main()
{
cout <<"简单实现单链表"<< endl;
cout <<"1、初始化"<< endl;
cout <<"2、插入"<< endl;
cout <<"3、头插法创建链表"<< endl;
cout <<"4、尾插法创建链表"<< endl;
cout <<"5、删除"<< endl;
cout <<"6、取值"<< endl;
cout <<"7、查找"<< endl;
cout <<"8、清空"<< endl;
cout <<"0、退出系统"<< endl;
cout <<"-------------------------------------" <<endl;
int n,m,a,b,num,c,d,e,f;
LinkList L;
while(1)
{
cout <<"输入想要执行的操作:" ;
cin >> n;
switch(n)
{
case 1:
m=InitList(L);
if(m)
cout <<"链表初始化成功"<<endl;
break;
case 2:
cout <<"请输入插入的位置及值:";
cin >>a>>b;
cout <<endl;
m=ListInsert(L,a,b);
if(m)
cout <<"插入成功"<<endl;
else
cout <<"插入位置不合法"<<endl;
break;
case 3:
cout <<"请输入你想存多少个数:";
cin >> num;
CreatList_head(L,num);
break;
case 4:
cout <<"请输入你想存多少个数:";
cin >> num;
cout<<endl;
CreatList_end(L,num);
break;
case 5:
cout <<"请输入你想删除第几个元素"<<endl;
cin >> c;
cout<<endl;
m=ListDelete(L,c);
if(m)
cout << "删除成功" <<endl;
else
cout << "删除位置不合法"<<endl;
break;
case 6:
cout <<"请输入要取第几个位置的值"<<endl;
cin >>d;
cout <<endl;
m=GetElem(L,d,e);
if(m)
cout<<"这个位置的值为:"<< e <<endl;
else
cout<<"位置不合法"<<endl;
break;
case 7:
cout <<"请输入要找的值:";
cin >> f;
cout<<endl;
m=LocateElem(L,f);
if(m)
cout<<"在第"<<m<<"个值"<<endl;
break;
case 8:
cout<<"链表已清空!自动退出程序"<<endl;
exit(0);
case 0:
exit(0);
}
cout<<"当前链表的长度是:"<< L->data <<endl;
cout << "当前链表的元素为:\n";
for(int i=1;i<=L->data;i++)
{
int e;
GetElem(L,i,e);
cout << e << " ";
}
cout<<endl;
cout<<"--------------------------------------------"<<endl;
cout<<endl;
}
return 0;
}
借鉴:学长的代码
好难啊啊啊啊(我方了)!!看来学的还是不清晰 !