📄 linklist.cpp
字号:
#include <iostream>
using namespace std;
typedef char ElemType;
typedef struct LNode //定义存储结构
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
int initlist(LinkList &L)
{
LinkList s;
s=new LNode;if(!s)return 0; //定义一个头节点
L=s;s->next=NULL;
return 0;
}
int doing(LinkList Q); //预定义选择函数
int length(LinkList L);
int readin(LinkList &L) //读入数据
{
cout<<"请输入入链长度"<<endl;
int l;cin>>l;
if(l<=0) //判断 l 是否合法
{
cout<<"参数有误"<<endl;
doing(L);
}
cout<<"请输入元素"<<endl;
char a;
LinkList s,p;
p=L;
for(int i=1;i<=l;i++)
{
cin>>a;
s=new LNode;
s->data=a;
s->next=NULL;
p->next=s; p=s;
}
return 0;
}
int readout(LinkList L) //读出数据
{
if(length(L)==0)exit(1); //判空
LinkList p;
for(p=L->next;p->next!=NULL;p=p->next)
{cout<<p->data<<" ";}
cout<<p->data ;
return 0;
}
int length(LinkList L) //求长度
{
LinkList p;int i;
p=L;
for(i=0;p->next!=NULL;i++)
{p=p->next;}
return i;
}
char getelme(LinkList L,int i) //取指定的元素
{
if(i<0||i>length(L)) //判断 i是否合法
{
cout<<"参数有误"<<endl;
exit(1);
}
LinkList p=L;
int j;
for(j=1;j<=i;j++)
{p=p->next ;}
return p->data;
}
int exchang(LinkList L,int i,char k) //修改指定的元素
{
if(i<0||i>length(L)) //判断 i是否合法
{
cout<<"参数有误"<<endl;
doing(L); //回到选择函数
}
LinkList p=L;
int j;
for(j=1;j<=i;j++)
{p=p->next ;}
p->data=k;
return 0;
}
int insert(LinkList &L,int i,ElemType k) //在指定的位置插入数据
{
if(i<0||i>length(L)) //判断 i是否合法
{
cout<<"参数有误"<<endl;
doing(L); //回到选择函数
}
LinkList p=L;
LinkList s;
int j;
for(j=1;j<i;j++)
{p=p->next ;}
s=new LNode;
s->data=k;
s->next=p->next;
p->next=s;
return 0;
}
int delelem(LinkList &L,int i) //在指定的位置删除数据
{
if(i<0||i>length(L)) //判断 i是否合法
{
cout<<"参数有误"<<endl;
doing(L); //回到选择函数
}
LinkList s,p=L;
int j;
for(j=1;j<i;j++)
{p=p->next ;}
s=p->next;
p->next =p->next ->next ;
delete s;
return 0;
}
int doing(LinkList Q) //功能选择函数
{
cout<<"--------------------请选择单链表操作-----------------"<<endl;
cout<<"1.读入元素(初始化只能执行一次,否则前一次被覆盖) "<<endl;
cout<<"2.读出所有链表元素 "<<endl;
cout<<"3.求链表长度 4.在指定位置取元素"<<endl;
cout<<"5.在指定位置修改元素 6.在指定位置插入元素"<<endl;
cout<<"7.在指定位置删除元素 "<<endl;
int a;cin>>a;char b;int i;
switch (a)
{
case 1:readin(Q);break;
case 2:cout<<readout(Q)<<endl;break;
case 3:cout<<length(Q)<<endl;;break;
case 4:
{
cout<<"请输入位置"<<endl;
cin>>i;
cout<<"在"<<i<<"处的是"<<getelme(Q,i)<<endl;
};break;
case 5:
{
cout<<"请输入修改的位置"<<endl;
cin>>i;
cout<<"请输入修改成的数据"<<endl;
cin>>b;
exchang(Q,i,b) ;
}break;
case 6:
{
cout<<"请输入插入的位置"<<endl;
cin>>i;
cout<<"请输入插入的数据"<<endl;
cin>>b;
insert(Q,i,b) ;
}break;
case 7:
{
cout<<"请输入删除的位置"<<endl;
cin>>i;
delelem(Q,i);
}break;
default:cout<<"没有这个操作"<<endl;
}
cout<<"继续Y/N";
char d;cin>>d;
if (d=='y'||d=='Y')doing(Q); //继续操作
return 0;
}
int main()
{
LinkList Q;
initlist(Q);
doing(Q);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -