zoukankan      html  css  js  c++  java
  • 一个指针构建的动态链表

     一:学生信息的录入

    图片

    二:学生信息的打印

    图片

    三:学生信息的增加

    图片

     四:学生信息的查询

    图片

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

    图片

    六:学生信息的删减

    图片

     #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<<" "<<(*p).name<<" "<<p->sex<<" "<<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<<" "<<(*p).name<<" "<<p->sex<<" "<<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<<" "<<(*p).name<<" "<<p->sex<<" "<<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;
    }

  • 相关阅读:
    怎样理解 C++ 11中的move语义
    面试---计算机网络
    TCP报头中的选项字段
    协程的实现之调度器
    CPU缓存
    TLS---线程局部存储
    微信libco协程设计及实现---总结
    libco源码解析---协程运行与基本结构
    2014年第五届蓝桥杯B组(C/C++)预赛题目及个人答案(欢迎指正)
    并查集(模板&典型例题整理)
  • 原文地址:https://www.cnblogs.com/zzkgis/p/3742592.html
Copyright © 2011-2022 走看看