码迷,mamicode.com
首页 > 其他好文 > 详细

一个指针构建的动态链表

时间:2014-05-23 03:52:30      阅读:271      评论:0      收藏:0      [点我收藏+]

标签:c   ext   http   a   int   com   

 一:学生信息的录入

bubuko.com,布布扣

二:学生信息的打印

bubuko.com,布布扣

三:学生信息的增加

bubuko.com,布布扣

 四:学生信息的查询

bubuko.com,布布扣

 五:学生信息的修改及复位

bubuko.com,布布扣

六:学生信息的删减

bubuko.com,布布扣

 #include<iostream>
#include<string>
#define NULL 0
#define STU struct student
using namespace std;
STU
{
 int num;
 float score;
 char name[20];
 char sex[5];
 STU *next;
};
void main()
{
 STU * log(STU * head1,int &G);
 void print(STU *head1);
 void cor(STU *head1);
 void fou(STU *head1);
 void add(STU *head1);
 void del(STU *head1);
 STU *head1;
 int m,g=0;
    cout<<"_________________________菜单栏______________________________"<<endl;
 cout<<"                      1、学生信息的录入                      "<<endl;
    cout<<"                      2、学生信息的增加                      "<<endl;
 cout<<"                      3、学生信息的删除                      "<<endl;
 cout<<"                      4、学生信息的查询                      "<<endl;
 cout<<"                      5、学生信息的修改                      "<<endl;
 cout<<"                      6、学生信息的打印                      "<<endl;
 cout<<"                      0、退出系统                            "<<endl;
 cout<<"_____________________________________________________________"<<endl;
 while(m)
 {
  cout<<"                                                         请选择菜单栏";
     cin>>m;
  if(m>1)
  {
   if(g==0)
   {
    cout<<"对不起,您还没有将学生信息录入,目前还不能执行1之后的操作!!!"<<endl; //固定操作步骤
    break;              //若直接执行操作1之后的选项,报错退出
   }
  }
     switch(m)
  {
  case 1:head1=log(head1,g);break;
  case 2:add(head1);break;
  case 3:del(head1);break;
  case 4:fou(head1);break;
  case 5:cor(head1);break;
  case 6:print(head1);break;
  }
 }
}
STU * log(STU * head1,int &G)
{
 G++;
 STU *p;
 int m=0;
 head1=NULL;
 p=new student;
 cout<<"请录入第1个学生的信息:"<<endl;
 cin>>(*p).num>>(*p).name>>p->sex>>p->score;
 while((*p).num!=0)
 {
  m++;
  if(m==1)
  {
   head1=p;
   (*p).next=p;
  }
  else
  {
   (*p).next=new student;
   cout<<"请录入第"<<m<<"个学生的信息:"<<endl;
   cin>>(*(*p).next).num>>(*(*p).next).name>>(*(*p).next).sex>>(*(*p).next).score;
   p=(*p).next;
  }
 }
 (*p).next=NULL;
 return(head1);
}
void print(STU *head1)
{
 STU *p;
 p=head1;
 while(p->num!=0)
 {
  cout<<(*p).num<<"\t"<<(*p).name<<"\t"<<p->sex<<"\t"<<p->score<<endl;
  p=(*p).next;
 }
}
void cor(STU *head1)
{
 void print(STU *head1);
 int m;
 STU *p,*p0,*p1;
 p=head1;
 p0=new student;
 p1=new student;
 cout<<"请输入您要修改的学生信息:"<<endl;
 cin>>(*p0).num>>(*p0).name>>p0->sex>>p0->score;
 while((*p).num!=(*p0).num&&p!=NULL)    
 {
  p=(*p).next;
 }
 if((*p).num!=(*p0).num)
 {
  cout<<"抱歉!此链表中不存在该生!!!"<<endl;//有点小问题
 }
 else
 {
  cout<<"请输入修改后的学生信息:"<<endl;
     cin>>(*p).num>>(*p).name>>p->sex>>p->score;
  (*p1).num=(*p).num;
  strcpy((*p1).name,(*p).name);
  strcpy((*p1).sex,(*p).sex);
  (*p1).score=(*p).score;
  while(m!=3)
  {
   cout<<"是否要复位?1、不复位  2、复位  3、退出:"<<endl;
         cin>>m;
         if(m==1)
   {
    (*p).num=(*p1).num;
    strcpy((*p).name,(*p1).name);
    strcpy((*p).sex,(*p1).sex);
    (*p).score=(*p1).score;
    print(head1);
   }
      if(m==2)
   {
    (*p).num=(*p0).num;
       strcpy((*p).name,(*p0).name);
    strcpy((*p).sex,(*p0).sex);
    (*p).score=(*p0).score;
       print(head1);
   }
  }
 }
}
void fou(STU *head1)
{
 void num(STU *head1);
 void name(STU *head1);
 int m;
 while(m!=3)
 {
  cout<<"                                                       "<<"请选择查询方式:"<<endl;
     cout<<"                                                       "<<"1、通过学号查询"<<endl;
     cout<<"                                                       "<<"2、通过姓名查询"<<endl;
     cout<<"                                                       "<<"3、退出查询系统"<<endl;
  cin>>m;
  switch(m)
  {
  case 1:num(head1);break;
  case 2:name(head1);break;
  }
 }
}
void num(STU *head1)
{
 int num1;
 STU *p;
 p=head1;
 cout<<"请输入被查询学生的学号:"<<endl;
 cin>>num1;
 while((*p).num!=num1)
 {
  p=(*p).next;
 } 
 if((*p).num==num1)
 {
  cout<<(*p).num<<"\t"<<(*p).name<<"\t"<<p->sex<<"\t"<<p->score<<endl;
 }
}
void name(STU *head1)
{
 char name1[10];
 STU *p;
 p=head1;
 cout<<"请输入被查询学生的姓名:"<<endl;
 cin>>name1;
 while(strcmp((*p).name,name1)!=0)
 {  
  p=(*p).next;
 }
 if(strcmp((*p).name,name1)==0)
 {
  cout<<(*p).num<<"\t"<<(*p).name<<"\t"<<p->sex<<"\t"<<p->score<<endl;
 }
}
void add(STU *head1)
{
 void print(STU *head1);
 STU *p,*p1;
 p=head1;
 p1=new student;
 cout<<"请输入新增学生的学生信息:"<<endl;
 cin>>(*p1).num>>(*p1).name>>p1->sex>>p1->score;
 if((*p1).num<p->num)         //若执行此步,执行完此步后直接打印并跳出循环//
 {
  (*p1).next=head1;
  head1=p1;
  print(head1);
 }
 while(p1->num>p->next->num&&p->next->num!=0)   //若执行此步,第一个if肯定未执行//
 {
  p=p->next;                        //p结点向后移//
 }
 if(p->next->num>p1->num)          //此句表示p1遇到了自己该在的位置,插入//
 {
  p1->next=p->next;
  p->next=p1;
  print(head1);                     //打印
 }
    else //此句表示p1应该是最后一个结点//
 {
  (*p1).next=p->next;
  (*p).next=p1;
  print(head1);                     //打印
 }

}
void del(STU *head1)
{
 void print(STU *head1);
 STU *p,*p0;
 p0=new student;
 p=head1;
 int m;
 cout<<"请选择:"<<endl;
 cout<<"1、通过学号删除"<<endl;
 cout<<"2、通过姓名删除"<<endl;
 cin>>m;
 if(m==1)
 {
  cout<<"请输入要删除的学号:"<<endl;
  cin>>p0->num;
  if(p->num==p0->num)
  {
   head1=p->next;
   print(head1);
  }
  while(p->next->num!=p0->num&&p->next!=NULL)
  {
   p=p->next;
  }
  if(p->next->num==p0->num&&p->next!=NULL)
  {
   p->next=p->next->next;
   print(head1);
  }
  else
  {
   p->next=NULL;
   print(head1);
  }
 }
 if(m==2)
 {
  cout<<"请输入要删除的学生姓名:"<<endl;
  cin>>p0->name;
  if(strcmp(p0->name,p->name)==0)
  {
   head1=p->next;
   print(head1);
  }
  while(strcmp(p->next->name,p0->name)!=0&&p->next!=NULL)
  {
   p=p->next;
  }
  if(strcmp(p->next->name,p0->name)==0&&p->next!=NULL)
  {
   p->next=p->next->next;
   print(head1);
  }
  else
  {
   p->next=NULL;
   print(head1);
  }
 }
 delete p0;
}

一个指针构建的动态链表,布布扣,bubuko.com

一个指针构建的动态链表

标签:c   ext   http   a   int   com   

原文地址:http://www.cnblogs.com/zzkgis/p/3742592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!