⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 链表.cpp

📁 是一种数据结构的编程代码
💻 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 + -