`

C++课程设计——链表类

 
阅读更多
C++课程设计,我链表类,编完之后感觉对链表有了更深刻的认识
//  h9.h  




#ifndef h9_h_


#define h9_h_

#include<iostream>

using namespace std;


typedef struct LNode
{
    struct LNode* next;
    struct LNode* prev;
    int data;
}*LinkList,LNode;


class List
{
private:
    LinkList HeadList;
    int LengthList;
public:
    List();
    List(const List& temp);
    ~List();
    int SearchLNode(int i);
    bool InsertLNode(int i,int data_);
    bool DeleteLNode(int i);
    void ShowList();
    int GetLengthList();
    List& operator=(const List& temp);
    List operator+(const List& temp);
    List operator-(const List& temp);
    List& operator+=(List& temp);
    List& operator-=(const List& temp);
    friend ostream& operator<<(ostream& out,List& temp);
};

#endif


//  h9.cpp


#include"h9.h"


List::List()
{
    if(!(HeadList = new LNode))
    {
        cout<<"distribute memory fail!\n";
        return;
    }
    HeadList->next = NULL;
    HeadList->prev = NULL;
    LengthList=0;
}


List::~List()
{
    LinkList temp = NULL;
    while(HeadList->next != NULL)
    {
        temp = HeadList->next;
        HeadList->next = temp->next;
        delete temp;
    }
    LengthList = 0;
    delete HeadList;
}


List::List(const List& temp)
{
    LinkList newlist,lastlist,p;
    p = temp.HeadList->next;
    HeadList = new LNode;
    lastlist = HeadList;
    this->HeadList->next = NULL;
    this->HeadList->prev = NULL;
    this->LengthList = temp.LengthList;
    while(p)
    {
        newlist = new LNode;
        newlist->data = p->data;
        lastlist->next = newlist;
        newlist->prev = lastlist;
        newlist->next = NULL;
        lastlist = newlist;
        p = p->next;
    }
}


bool List::InsertLNode(int i,int data_)
{
    LinkList p = HeadList->next,Pinsert;
    int j = 1;
    Pinsert = new LNode;
    Pinsert->data = data_;
    Pinsert->next = NULL;
    Pinsert->prev = NULL;
    if(i == 1)
    {
        Pinsert->prev = HeadList;
        HeadList->next = Pinsert;
        LengthList = 1;
        return true;
    }
    else
    {
        while(p != NULL&&j < i-1)                    //查询第i-1行 
        {
            p = p->next;
            j++;
        }
        if(p == NULL)
        {
            cout<<"illegal operate!\n";    
            return false;
        }
        Pinsert->next = p;
        p->prev->next = Pinsert;
        Pinsert->prev = p->prev;
        p->prev = Pinsert;
        LengthList++;
    }
    return true;
}


int List::SearchLNode(int i)
{
    int j = 1,temp;
    LinkList p=HeadList->next;
    while(p&&j < i)
    {
        p = p->next;
        j++;
    }
    if(p == NULL || j > i)
    {
        cout << "search fail\n";    
        return -1;
    }
    temp = p->data;
    return temp;
}

 


bool List::DeleteLNode(int i)
{
    int j = 1;
    LinkList p = HeadList->next;
    while(p && j < i)                    
    {
        p = p->next;
        j++;
    }
    if(p == NULL||j > i)
    {
        cout << "delete fail!\n";
        return false;
    }
    p->prev->next = p->next;
    p->next->prev = p->prev;
    delete p;
    LengthList--;
    return true;
}


void List::ShowList()
{
    LinkList p = HeadList->next;
    cout<<"Now,this List is  ";
    for(;p != NULL;p = p->next)
    {
        cout << p->data<<"<==>";
    }
    cout << "NULL\n";
}

int List::GetLengthList()
{
    return LengthList;
}


List& List::operator=(const List& temp)
{
    LinkList newlist,lastlist,p;
    p = temp.HeadList->next;
    HeadList = new LNode;
    lastlist = HeadList;
    this->HeadList->next = NULL;
    this->HeadList->prev = NULL;
    this->LengthList = temp.LengthList;
    while(p)
    {
        newlist = new LNode;
        newlist->data = p->data;
        lastlist->next = newlist;
        newlist->prev = lastlist;
        newlist->next = NULL;
        lastlist = newlist;
        p = p->next;
    }
    return *this;
}


List List::operator+(const List& temp)
{
    List nowList,tempList(*this);
    LinkList p = tempList.HeadList->next,q = temp.HeadList->next;
    while(p->next != NULL)
    {
        p = p->next;
    }
    p->next = q;
    q->prev = p;
    delete temp.HeadList;
    nowList=tempList;
    nowList.LengthList = tempList.LengthList + temp.LengthList;
    return nowList;
}


List& List::operator-=(const List& temp)
{
    List t(temp);
    LinkList p ,q = t.HeadList->next,r;
    while(q != NULL)
    {
        p = this->HeadList->next;
        while(p != NULL)
        {
            if(p->data == q->data)
            {
                r = p->prev;
                p->prev->next=p->next;
                p->next->prev=p->prev;
                delete p;
                this->LengthList--;
                p = r;
            }
            p = p->next;
        }
        q = q->next;
    }
    return *this;
}


List& List::operator+=(List& temp)
{
    LinkList p = this->HeadList->next,q = temp.HeadList->next;
    while(p->next != NULL)
    {
        p = p->next;
    }
    p->next = q;
    q->prev = p;
    delete temp.HeadList;
    this->LengthList += temp.LengthList;
    return *this;
}


List List::operator-(const List& temp)
{
    List t(temp),m(*this);
    LinkList p,q = t.HeadList->next,r;
    while(q != NULL)
    {
        p = m.HeadList->next;
        while(p != NULL)
        {
            if(p->data == q->data)
            {
                r = p->prev;
                p->prev->next = p->next;
                p->next->prev = p->prev;
                delete p;
                m.LengthList--;
                p = r;
            }
            p = p->next;
        }
        q = q->next;
    }
    return m;
}


ostream& operator<<(ostream& out,List& temp)
{
    List t(temp);
    out << "length of List:"<< t.GetLengthList() << endl;
    out << "data of List:";
    for(int i = 0;i < t.GetLengthList();i++)
    {
        out << t.HeadList->next->data << "   ";
        t.HeadList = t.HeadList->next;
    }
    out<<"\n";
    return out;
}


// h9main.cpp  


#include"h9.h"

int main(void)
{
   List l,t,lt;
    int temp;
    l.InsertLNode(1,10);
    l.InsertLNode(2,20);
   l.InsertLNode(3,30);
   l.InsertLNode(4,40);
    l.ShowList();
    t.InsertLNode(1,20);
    t.InsertLNode(2,40);
   t.InsertLNode(3,70);
   t.InsertLNode(4,80);
   t.ShowList();
    l-=t;
    l.ShowList();
   cout<<l;       
    return 0;
}
分享到:
评论

相关推荐

    C++课程设计——餐厅管理系统源文件

    **C++课程设计——餐厅管理系统的知识概览** 在C++课程设计中,餐厅管理系统是一个经典且实用的项目,它涵盖了面向对象编程、类的设计、文件操作、异常处理等多个核心知识点。通过这个项目,学生可以深入理解C++...

    C++课程设计——选课系统

    根据给定的文件信息,我们可以总结出以下关于“C++课程设计——选课系统”的相关知识点: ### 一、项目背景及目标 本项目旨在通过C++编程语言完成一个简单的选课系统的开发。该系统主要面向学校的教务管理和学生...

    C++课程设计——旅馆管理系统源程序

    【标题】"C++课程设计——旅馆管理系统源程序"是一个基于C++编程语言的实践项目,旨在帮助学生理解和掌握C++在实际应用中的运用,特别是针对数据管理与系统设计的技能。这个系统模拟了一个旅馆的日常运营,包括客房...

    C++课程设计——商品库存管理系统源程序

    在本项目中,"C++课程设计——商品库存管理系统源程序"是一个面向初学者和进阶者的学习资源,旨在帮助他们理解和应用C++语言来构建实际的软件系统。这个系统专注于管理商品库存,包含了添加、删除商品,更新库存数量...

    C++课程设计——学生成绩管理系统

    《C++课程设计——学生成绩管理系统》 在IT领域,C++是一种强大的面向对象编程语言,被广泛应用于系统软件、应用软件、游戏开发以及大型企业级应用的后端开发。本项目“学生成绩管理系统”是针对C++初学者进行的一...

    C++课程设计——学生学籍管理系统

    根据给定的文件信息,以下是对“C++课程设计——学生学籍管理系统”涉及的关键知识点进行的详细解析: ### C++课程设计概述 本课程设计是基于C++语言开发的一款学生学籍管理系统,旨在帮助学生熟悉C++语言的高级...

    c++课程设计——人事管理系统

    在本项目中,"C++课程设计——人事管理系统"是一个基于C++编程语言实现的软件应用,主要用于管理和处理企业或组织内部的人事信息。这个系统涵盖了员工的基本信息管理,包括员工的增删查改,以及部门调动等功能。下面...

    C++课程设计——简单的人员管理系统

    在本项目中,"C++课程设计——简单的人员管理系统"是一个基础级别的软件开发实践,旨在让学生熟悉C++编程语言,并应用其构建一个实用的应用程序。这个系统是在控制台环境下运行的,因此它不依赖于图形用户界面,而是...

    C++课程设计——超市收银系统

    【C++课程设计——超市收银系统】 C++是一种强大的面向对象编程语言,常用于开发高效、稳定且可移植的应用程序。在这个项目中,我们利用C++构建了一个基础的超市收银系统,它能处理商品信息、购物行为,并通过文件...

    c++课程设计——职工工资管理系统.pdf

    《C++课程设计——职工工资管理系统》 C++是一门强大的面向对象编程语言,它以其高效、灵活性和丰富的库支持而被广泛应用于软件开发,尤其是系统级编程和大型应用程序的构建。在这个C++课程设计中,我们将探讨如何...

    C++课程设计——简易图书管理系统

    在本C++课程设计项目中,我们构建了一个简易图书管理系统,旨在锻炼学生的编程技能和对C++语言的理解,同时提高其在实际应用中的问题解决能力。这个系统包含了多个功能模块,如图书查询、借书、还书、书目浏览以及...

    c++课程设计——职工工资管理系统(链表)

    定义职工(employee )类,其中至少包括姓名、性别、工号、电话、所在科室和工资。 功能要求: 1、设计菜单实现功能选择; 2、输入功能:输入职工信息,并保存到文件中; 3、查询功能: 1)能够根据工号精确...

    2017.12 C++语言课程设计——通讯录管理系统.zip

    【标题】"2017.12 C++语言课程设计——通讯录管理系统"揭示了本次项目的核心,即使用C++编程语言开发一个通讯录管理软件。C++是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持过程化编程,也支持面向...

    C++课程设计-学生宿舍管理系统.zip

    《C++课程设计:学生宿舍管理系统》 C++是一门强大的面向对象编程语言,它以其高效、灵活性和广泛的库支持而被广泛应用于系统编程、游戏开发、科学计算以及大型软件项目。在这个“C++课程设计-学生宿舍管理系统”中...

    C++课程设计--学生通讯录管理系统

    《C++课程设计--学生通讯录管理系统》是一个实践项目,旨在巩固和应用C++编程语言的知识,特别是面向对象编程的概念。这个系统不仅限于学生通讯录的管理,还包括了教师信息管理和图书馆管理的功能,全面展示了C++在...

    c或c++基础课程设计——公司职工信息管理系统.zip

    在本课程设计中,我们将探讨如何使用C或C++编程语言构建一个公司职工信息管理系统。这个系统能够存储、检索和管理公司员工的基本信息,对于学习C或C++的基础知识以及理解面向过程或面向对象编程的概念非常有帮助。...

    C++课程作业——人员管理系统.rar

    平台不限、链表可用公共模板类。 管理的人员有: 本科生:姓名、性别、年龄、身份证号码、高考总分 脱产研究生:姓名、性别、年龄、身份证号码、专业 在职研究生:姓名、性别、年龄、身份证号码、学号、专业、工资 ...

    c++课程设计(学生成绩管理系统)

    【标题】:“C++课程设计——学生成绩管理系统” 在这个C++课程设计中,我们主要关注的是构建一个学生成绩管理系统。这个系统旨在帮助教育机构或教师有效地管理和追踪学生的学术成绩,提供便捷的数据录入、查询、...

    C++课程设计 单链表——学生信息管理系统.pdf

    《C++课程设计:单链表——学生信息管理系统》 学生信息管理系统是一款基于Visual C++集成开发环境的软件,旨在简化学籍管理工作,适用于所有Windows操作系统。该系统的核心是使用单链表数据结构来管理学生的基本...

    C++课程设计之酒店客房管理系统

    在本篇中,我们将深入探讨一个C++课程设计项目——酒店客房管理系统。这个系统旨在模拟实际酒店的运营流程,实现对客房信息的有效管理,包括信息录入、查询、修改和删除等关键功能。 首先,我们来看系统的核心概念...

Global site tag (gtag.js) - Google Analytics