#include<iostream>
using namespace std;
typedef float Elemtype;
typedef struct Lnode{
Elemtype data;
struct Lnode *next;
}Lnode,*LinkList;
//初始化链表
void InitList_L(LinkList &L){
L=new Lnode;
L->next=NULL;
cout<<"初始化成功"<<endl;
}
//判断链表是否为空
void ListEmpty(LinkList &L){
if(L->next)cout<<"链表不为空"<<endl;
else cout<<"链表为空"<<endl;
}
//销毁链表,链表销毁后不存在
void DestroyList_L(LinkList &L){
LinkList p;
while(L){
p=L;
L=L->next;
delete p;
}
cout<<"销毁成功"<<endl;
}
//清空链表,链表依旧存在,但链表中无元素
void ClearList(LinkList &L){
LinkList p,q;
p=L->next;
while(p){
q=p->next;
delete p;
p=q;
}
L->next=NULL;
cout<<"清空成功"<<endl;
}
//求单链表表长
void ListLength_L(LinkList L){
LinkList p;
p=L->next;
int n=0;
while(p){
n++;
p=p->next;
}
cout<<"单链表表长为:"<<n<<endl;
}
//单链表的建立(头插法)
void CreateList_H(LinkList &L){
L=new Lnode;
LinkList p;
L->next=NULL;
int n;
cout<<"输入要插入的元素个数"<<endl;
cin>>n;
for(int i=0;i<n;i++){
p=new Lnode;
cout<<"输入插入元素的的元素值"<<endl;
cin>>p->data;
p->next=L->next;
L->next=p;
}
}
//单链表的建立(尾插法)
void CreateList_R(LinkList &L){
L=new Lnode;
L->next=NULL;
LinkList r,p;
r=L;
int n;
cout<<"输入要插入的元素个数"<<endl;
cin>>n;
for(int i=0;i<n;i++){
p=new Lnode;
cout<<"输入插入元素的的元素值"<<endl;
cin>>p->data;
p->next=NULL;
r->next=p;
r=p;
}
}
//遍历链表
void PrintElem(LinkList &L){
LinkList p;
p=L->next;
while(p){
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
//查找指定位置的元素
void GetElem_L(LinkList &L){
LinkList p;
int i;
int e;
p=L->next;
cout<<"请输入要查找的元素位置:";
cin>>i;
for(int j=1;j<i;j++){
p=p->next;
}
cout<<"该元素值为: "<<p->data<<endl;
}
//查找指定元素值的元素
void LocateElem(LinkList &L){
LinkList p;
p=L->next;
int e,i;
i=1;
cout<<"请输入查找元素位置的元素值:";
cin>>e;
while(p){
if(p->data=e) cout<<"该元素的元素位置为:"<<i<<endl;
else p=p->next;
}
}
//在指定位置插入元素
void ListAdd(LinkList &L){
int i,e;
cout<<"请输入想要插入的元素的位置"<<endl;
cin>>i;
cout<<"请输入元素值: ";
cin>>e;
LinkList p,s;
p=L;
for(int j=1;j<i;j++){
p=p->next;
}
s=new Lnode;
s->data=e;
s->next=p->next;
p->next=s;
}
//在指定位置删除元素
void ListDelete(LinkList &L){
int i;
cout<<"请输入想要删除的元素的位置"<<endl;
cin>>i;
LinkList p,q;
p=L;
for(int j=1;j<i;j++){
p=p->next;
}
q=p->next;
p->next=q->next;
delete q;
}
int main(){
LinkList L;
int a;
while(true){
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<<"插入链表中指定位置元素------------------9"<<endl;
cout<<"遍历链表--------------------------------10"<<endl;
cout<<"查找指定位置的元素值--------------------11"<<endl;
cout<<"查找指定值的元素位置--------------------12"<<endl;
cout<<"在指定位置删除元素----------------------13"<<endl;
cout<<"请输入操作数"<<endl;
cin>>a;
switch(a){
case 1:
InitList_L(L);
break;
case 2:
DestroyList_L(L);
break;
case 3:
ListLength_L(L);
break;
case 4:
ListEmpty(L);
break;
case 5:
ClearList(L);
break;
case 6:
CreateList_H(L);
break;
case 7:
CreateList_R(L);
break;
case 8:
PrintElem(L);
break;
case 9:
ListAdd(L);
break;
case 10:
PrintElem(L);
break;
case 11:
GetElem_L(L);
break;
case 12:
LocateElem(L);
break;
case 13:
ListDelete(L);
break;
}
}
return 0;
}