`
Tveiker
  • 浏览: 55803 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

C++学校实验(链表实现)

阅读更多
近日已经临近考试了,想起啊我还有一个数据结构关于链表的实验未作,昨天折腾了一晚上,但是有个问题还是未解决。
其问题就是:
一个学生的信息:
1、姓名
2、学号
3、性别
4、年龄
用一个链表将其连接起来,从外界输入一个年龄,将与该年龄一样的学生全从链表中删除

分析:对于该实验给出一个
ADT student
操作对象:其基本信息(私有成员变量)
基本操作:
student();//构造默认参数学生
student(char *name,char *sex,int age);//构造指定参数的学生
~student()://删除学生
display();//显示学生信息
student &operator=(student &s);//重载=用于后面链表的赋值
对于链表的结构
ADT Link
操作对象:学生Student
Link()//构造空表
Delete()//删除一个元素
Add(Student &s)//向链表中添加s
Display()//显示链表
~Link();//释放链表
其代码如下:
#include<iostream>
#include<string>
using namespace std;
class Link;
/*
**对于学号的问题还在研究中,由于拷贝函数、构造函数用的比较杂,没有实现每次加1,但是链表功能还是实现了
*/
class Student{
        friend class Link;
public:
        Student();
        Student(Student &);
        Student(char *name,char* sex,int age);
        void display();
        Student &operator=(Student &s);
        ~Student();
private:
        char *Name;
        int age;
        char *Sex;
        int no;
        Student *next;
        int static Stu_no;
};
int Student::Stu_no=2009000;
Student::Student(){
        no=Stu_no++;
        Name=new char[2];
        strcpy(Name,"X");
        Sex=new char[4];
        strcpy(Sex,"Boy");
        age=20;
}
Student::Student(char *name,char* sex,int age){
        no=Stu_no++;
        this->age=age;
        Name=new char[strlen(name)+1];
        strcpy(Name,name);
        Sex=new char[strlen(sex)+1];
        strcpy(Sex,sex);
}
Student::Student(Student &s){
        no=Stu_no++;
        this->age=s.age;
        Name=new char[strlen(s.Name)+1];
        strcpy(Name,s.Name);
        Sex=new char[strlen(s.Sex)+1];
        strcpy(Sex,s.Sex);
        next=new Student;
}
Student &Student::operator =(Student &s){
        this->age=s.age;
        Name=new char[strlen(s.Name)+1];
        strcpy(Name,s.Name);
        Sex=new char[strlen(s.Sex)+1];
        strcpy(Sex,s.Sex);
        return *this;
}
Student::~Student(){
        delete []Name;
        delete []Sex;
        Stu_no--;
}
void Student::display(){
        cout<<Name<<" "<<no<<" "<<Sex<<" "<<age<<endl;
}
class Link{
public:
        Link();
        void Delete(int);
        void Add(Student& s);
        void Display();
        ~Link();
private:
        Student *pHead;
        Student *pTail;
        Student *pivot;
};
Link::Link(){//构造空链表
        pHead=NULL;;
        pTail=NULL;
        pivot=NULL;
}
Link::~Link(){//释放内存
        pivot=pHead;
        Student *p;
        while(pivot){
                p=pivot;
                pivot=pivot->next;
                delete p;
        }
}                
void Link::Add(Student &s){//向链表中加如学生s
        if(pHead==NULL){
                pHead = new Student(s);
                pTail=pHead;
                pTail->next=NULL;
        }
        else{
                Student *st=new Student(s);
            pTail->next=st;
                pTail=st;
                pTail->next=NULL;
        }

}
void Link::Display(){//显示链表中学生信息
        pivot=pHead;
        while(pivot){
                pivot->display();
                pivot=pivot->next;
        }
        if(pHead)//非空,每次显示一条链表画下划线
                cout<<"-------------------"<<endl;
}
void Link::Delete(int age){//删除链表中所有年龄为age的学生
        int yes=0;//记录是否有age的学生
        Student *p=pHead,*q;
        if(p&&p->age==age){//如果链表首为age删除
                do{
                        cout<<"删去了";
                    pHead->display();
                    yes=1;
                    pHead=p->next;
                    cout<<"-------------------"<<endl;
                    delete p;
                        p=pHead;
                }while(p&&p->age==age);
        }
        while(p){//其他地方
                q=p->next;//q为删除的元素,p记录其上一个元素
                if(q&&q->age==age){
                        p->next=q->next;
                        cout<<"删去了";
                        q->display();
                        yes=1;
                        delete q;
                        cout<<"-------------------"<<endl;
                }
                else if(!q&&yes==0){
                        cout<<"没有"<<age<<"岁的学生"<<endl;
                        cout<<"-------------------"<<endl;
                        return;
                }
                else
                        p=p->next;
        }
}
void main(){
        Student s1("X","Boy",22);
        Student s2("Y","Boy",20);
        Student s3("Z","Boy",21);
        Student s4("U","Girl",22);
        Link l;
        l.Add(s1);        
        l.Add(s2);
        l.Add(s3);
        l.Add(s4);
        l.Display();
        l.Delete(21);
        l.Display();
}

但是学生学号问题没解决...
分享到:
评论

相关推荐

    数据结构实验报告-利用链表实现简易学生信息管理系统(C语言)

    本实验报告详细介绍了如何使用链表来实现一个简易的学生信息管理系统。该系统基于C语言开发,并使用了线性表的链式存储结构来进行数据管理。主要内容包括实验目的、实验环境配置、具体实现的源代码、实验运行截图...

    c++学校人事管理系统.zip

    《C++学校人事管理系统》是一个基于C++编程语言开发的软件应用,主要用于管理学校的教职工信息。这个系统可以作为C++课程设计的一个实例,帮助学生掌握C++编程基础以及实际项目开发经验。它涉及到的主要知识点包括...

    高等学校计算机基础教育C++实验十

    在实验中,学生可能会通过编写具体的类来实现各种数据结构和算法,比如链表、栈和队列。 2. 模板(Template):C++的模板允许创建泛型代码,适用于处理不同类型的数据。学生可能会学习如何编写函数模板和类模板,以...

    C++学校人员信息管理系统课程设计.doc

    C++学校人员信息管理系统课程设计 该课程设计是一个使用C++语言开发的学校人员信息管理系统,旨在为大一大二学生提供一个实践性强的课程设计项目。该系统的开发使用到了C++语言的基本语法操作,如链表、文件读写等...

    C++高级程序设计实验与习题指导

    ### C++高级程序设计实验与习题指导 #### 核心知识点概览 根据提供的信息,我们可以提炼出以下几个核心知识点: 1. **C++高级特性介绍** 2. **实验指导与习题解析** 3. **面向对象编程(OOP)概念** 4. **高级数据...

    C++实验报告.docx

    本实验报告详细阐述了一个基于C++编程语言的学生信息管理系统的设计与实现。系统旨在满足学校对学生信息便捷管理的需求,包括信息录入、修改、删除、查询等核心功能。以下是对系统各个方面的详细介绍: 1. **需求...

    数据结构上机报告--链表的应用.doc

    实验内容部分包含了两个程序,algo2-2.cpp和algo2-3.cpp,分别针对单链表和双链表实现了一系列基本操作。单链表只包含一个指向下一个节点的指针,而双链表则包含两个指针,一个指向前一个节点,一个指向后一个节点,...

    吉林大学C++实验课及报告

    在实验报告中提到的3000+字,很可能包含了对各种数据结构(如数组、链表、树、图)的分析和算法(如排序、搜索)的实现。学生可能需要设计和实现这些数据结构,以及优化算法以解决特定问题。例如,排序算法可能包括...

    C++图书管理系统大型实验

    图书馆管理系统为各大学校提供了方便。从设计开始采用了以数据为中心的面向对象思想。为了提高对数据操作的理解,提高自身的编程逻辑,采用链表保存所有信息,程序结束存放在文本文件中。,C++作为一款面向对象的...

    c++学生宿舍管理系统(含论文详解)_C++_宿舍管理系统_学生宿舍管理系统论文详解_学生管理系统_

    本文将深入探讨一个基于C++编程语言实现的学生宿舍管理系统,以及相关的论文详解,旨在提供一套实用且高效的解决方案。 一、C++语言基础 C++是C语言的扩展,具有面向对象编程的特点,其强大的性能和灵活性使其成为...

    C++数据结构实验三:树的应用

    4. 掌握树和二叉树的逻辑结构特点、二叉树的顺序存储结构、二叉树的链式存储结构——二叉链表、二叉链表的结构体类型定义、在二叉链表存储结构上先序遍历、中序遍历、后序遍历的实现算法。 实验内容 1、以字符串...

    C++大作业之学生管理系统

    对于GUI,可以利用Qt、wxWidgets或C++标准库的实验性组件(如)。 3. **操作接口**:如添加学生、删除学生、查找学生、更新学生信息、显示所有学生信息、统计分析等功能,这些可以通过设计类和对象的接口来实现。 ...

    学生管理系统 电梯模拟 c++简单例子

    学生管理系统是计算机科学中一个基础但实用的项目,主要目的是通过编程实现对学校学生信息的管理。这个系统通常包括学生的基本信息录入、查询、修改、删除等功能,帮助教育机构或教师更有效地进行教学管理和数据统计...

    【C++程序设计课程】运动会管理系统实验报告

    【C++程序设计课程】运动会管理系统实验报告是一个旨在让学生运用所学C++知识解决实际问题的实践项目。项目的核心是设计一个能够管理运动会信息的系统,涵盖了运动员信息、运动会时间信息以及评分数据的输入、查询、...

    c++/c长整数四则运算 doc 代码解释

    标题和描述中提到的“C++/C长整数四则运算”是指在C或C++编程语言中处理超出标准整数类型(如`int`、`long`等)范围的大整数运算。通常,这涉及到自定义数据结构和算法来实现大整数的存储、读取、加减乘除等操作。在...

    C++的校园管理系统设计

    《C++实现的校园管理系统设计详解》 C++是一种强大且灵活的编程语言,尤其适合构建复杂的系统,如校园管理系统。在本项目中,我们将深入探讨如何利用C++设计并实现一个功能齐全、高效的校园管理系统。 一、系统...

    北邮小学期C++所有问题代码

    4. **指针**:C++中的强大工具,用于直接操作内存,实现动态内存分配和数据结构(如链表、树)。 5. **数组和向量**:存储和操作一组同类型数据的结构,向量是STL(标准模板库)的一部分,提供动态数组功能。 6. *...

    燕山大学数据结构实验报告.doc

    在本实验中,学生们可能使用C++或Java等编程语言实现了一个线性表类,并实现了上述操作。其中,两个有序链表的合并是一个典型的操作,它要求在保持排序的前提下,将两个已排序的链表合并为一个。这通常通过比较链表...

Global site tag (gtag.js) - Google Analytics