#include<iostream>
using namespace std;
typedef struct list{
int number;
struct list *next;
}list,*Linklist; //Linklist为指向结构体list的指针类型(list*==linklist)
void print(Linklist L){ //遍历
if(L->next==NULL)
cout<<"链表为空"<<endl;
L=L->next;
while(L!=NULL){
cout<<L->number<<" ";
L=L->next;
}
cout<<"\n";
}
void Create(Linklist &L){ //头插法创建链表,并输入一定的数(引用)
int i;
L=new list;
L->next=NULL;
while(cin>>i){
if(i==0)
break;
list *p=new list;
p->number=i;
p->next=L->next;
L->next=p;
}
}
void Insert(Linklist &L,int a){ //插入操作,并控制插入位置,防止非法访问
int pe;
Linklist p=L;
Linklist r=new list;
a--;
while(a--){
if(p!=NULL)
p=p->next;
else{
cout<<"越界"<<endl;
pe=1;
break;
}
}
if(pe!=1){
cout<<"请输入要插入的值"<<endl;
cin>>r->number;
r->next=p->next;
p->next=r;
}
}
void Delete(Linklist &L,int a){ //删除指定位置元素
int pe;
Linklist p=L;
a--;
while(a--){
if(p!=NULL)
p=p->next;
else{
cout<<"越界"<<endl;
pe=1;
break;
}
}
if(pe!=1){
Linklist q=p->next;
p->next=q->next;
free(q);
}
}
void Find(Linklist L,int a){ //查找
int pe;
while(a--){
if(L!=NULL)
L=L->next;
else{
cout<<"越界"<<endl;
pe=1;
break;
}
}
if(pe!=1)
cout<<"搜找的数字为"<<L->number<<endl;
}
int main(){
int i,n,choice;
Linklist B;
while(1){ //功能表
cout<<"1.头插法建表 \n"<<"2.插入\n"<<"3.删除\n"<<"4.查找"<<endl;
cin>>choice;
switch (choice){
case 1:
Create(B);
print(B);
break;
case 2:
cout<<"请输入要插入的位置"<<endl;
cin>>n;
Insert(B,n);
print(B);
break;
case 3:
cout<<"请输入要删除元素的位置"<<endl;
cin>>n;
Delete(B,n);
print(B);
break;
case 4:
cout<<"请输入要查找的位置"<<endl;
cin>>n;
Find(B,n);
break;
default:
printf("输入错误\n");
break;
}
}
return 0;
}
数学结构-链表
最新推荐文章于 2024-09-10 20:37:54 发布