📄 链表.cpp
字号:
#include "iostream.h"
#include "string.h"
class data{public:
char name[10];
char num[10];
char tel[10];//定义类date;有三个数据元素name,num,tel
};
class node{public:
data x;
node *next;//用next指针指向下一个数据
};
class list{
private:
node *head;
public:
bool listInsert(int n,data *e);
bool listdelete(int n,data &e);
void show();
void showone(int n);
bool listremove(int m,int n);
list();
};
list::list()
{
head=new node(); //开辟头节点
strcpy(head->x.name," ");
strcpy(head->x.num," ");
strcpy(head->x.tel," ");
head->next=head;
}
bool list::listInsert(int n,data *e)//插入一个文件
{
node *k;
node *l=new node;
k=head;
for(int i=0;i<n-1;i++)
k=k->next;
l->next=k->next;
k->next=l;
strcpy(l->x.name,e->name);
strcpy(l->x.num,e->num);
strcpy(l->x.tel,e->tel);
//cout<<l->x.tel<<endl;
return(true);
}
bool list::listdelete(int n,data &e)//删除一个文件
{node *k;
node *l=new node;
k=head;
for(int i=0;i<n-1;i++)
k=k->next;
l=k->next;
k->next=l->next;
delete l;
return(true);
}
void list::show()
{
node *l;
l=head->next;
int n=1;
while(l!=head)
{cout<<"第"<<n<<"个学生的个人情况"<<endl;
cout<<"姓名"<<l->x.name<<endl;
cout<<"学号"<<l->x.num<<endl;
cout<<"电话"<<l->x.tel<<endl;
n++;
l=l->next;
}
}
void list::showone(int n)
{
node *l;
l=head->next;
for(int i=1;i<n;i++)
l=l->next;
cout<<"第"<<n<<"个学生的个人情况"<<endl;
cout<<"姓名"<<l->x.name<<endl;
cout<<"学号"<<l->x.num<<endl;
cout<<"电话"<<l->x.tel<<endl;
}
bool list::listremove(int m,int n)
{
if(m!=n+1&&m!=n-1){
node *k1,*k2,*l1,*l2;
k1=l1=head;
for(int i=0;i<m-1;i++)
k1=k1->next;
k2=k1->next;
for(int j=0;j<n-1;j++)
l1=l1->next;
l2=l1->next;
k1->next=k2->next;
l1->next=k2;
k2->next=l2->next;
}
else {
node *k,*l=new node;
k=head;
for(int i=0;i<n;i++)
k=k->next;
strcpy(l->x.name,k->x.name);
strcpy(l->x.num,k->x.num);
strcpy(l->x.tel,k->x.tel);
strcpy(k->x.name,k->next->x.name);
strcpy(k->x.num,k->next->x.num);
strcpy(k->x.tel,k->next->x.tel);
strcpy(k->next->x.name,l->x.name);
strcpy(k->next->x.num,l->x.num);
strcpy(k->next->x.tel,l->x.tel);
}
return (true);
}
void main()
{list mate;
data e;
char i;
char m,x,z;
int t,s,g,h,n=1,r,len=0;
cout<<"对链表进行操作按y,否则按n退出"<<endl;
cin>>x;
{if(x=='y')
t=1;
else t=0;
}
//cout<<i<<endl;
loop: if(t==1)
{cout<<"***********************************************************"<<endl;
cout<<"a.建立链表"<<endl;
cout<<"b.显示第几个同学的信息" <<endl;
cout<<"c.删除第几个同学的信息"<<endl;
cout<<"d.显示所有同学的信息"<<endl;
cout<<"e.插入同学的信息"<<endl;
cout<<"f.重新排列同学的信息"<<endl;
cout<<"g.退出"<<endl;
cout<<"请选择a-g"<<endl;
cin>>i;
switch(i)
{
case 'a'://建立链表
//int n=1;
m='y';
while(m=='y')
{
cout<<"姓名"<<endl;
cin>>e.name;
cout<<"学号"<<endl;
cin>>e.num;
cout<<"电话"<<endl;
cin>>e.tel;
//cout<<e.name<<endl;
mate.listInsert(n++,&e);
len++;
//mate.show();////////////////////////////
cout<<"y or n?"<<endl;
cin>>m;
}
t=0;
cout<<endl<<"进行其他操作按y"<<endl;
cin>>z;
if(z=='y')t=1;
break;
case 'b'://显示第几个同学的信息
if(len<=0)cout<<"无任何信息"<<endl;
else {cout<<"显示第几个同学的信息?"<<endl;
cin>>s;
mate.showone(s);
t=0;
cout<<endl<<"进行其他操作按y"<<endl;
cin>>z;
if(z=='y')t=1;}
break;
case 'c'://删除第几个同学的信息
int i;
cout<<"删除第几个?"<<endl;
cin>>i;
if(i>0&&i<=len){
mate.listdelete(i,e);
cout<<"删除第"<<i<<"个人成功"<<endl;
len--;
t=0;
cout<<endl<<"进行其他操作按y"<<endl;
cin>>z;
if(z=='y')t=1;}
else
cout<<"无第"<<i<<"个人"<<endl;
break;
case 'd'://显示所有同学的信息
//cout<<"gjg"<<endl;
if(len<=0)cout<<"无任何信息"<<endl;
else {mate.show();
t=0;
cout<<endl<<"进行其他操作按y"<<endl;
cin>>z;
if(z=='y')t=1;}
break;
case 'e'://插入同学的信息
cout<<"插入到第几行?"<<endl;
cin>>r;
if(r>0&&r<=len+1)
{cout<<"姓名"<<endl;
cin>>e.name;
cout<<"学号"<<endl;
cin>>e.num;
cout<<"电话"<<endl;
cin>>e.tel;
cout<<e.name<<endl;
mate.listInsert(r,&e);
len++;
t=0;
cout<<endl<<"进行其他操作按y"<<endl;
cin>>z;
if(z=='y')t=1;}
else
cout<<"目前还没有"<<r<<"个人"<<endl;
break;
case 'f'://重新排列同学的信息
cout<<"移取第几个同学的信息?"<<endl;
cin>>g;
if(g>0&&g<=len){
cout<<"移到第几行?"<<endl;
cin>>h;
mate.listremove(g,h);
}
else
cout<<"无此同学信息"<<endl;
break;
case 'g':
return;
}goto loop;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -