(面向对象)_实训13_虚函数

第一关

#include "ArrayList.h"
#include<string.h>


ArrayList::~ArrayList() {
    //delete data;
}
ArrayList::ArrayList() { size = 0; capacity = 0; data = new int; }
ArrayList::ArrayList(const ArrayList& rhs) { memcpy(data, rhs.data, 4 * sizeof(rhs.data)); size = rhs.size; capacity = rhs.capacity; }
ArrayList::ArrayList(int const a[], int n)
{
    int i = 0;
    while (i < n)
    {
        data[i] = a[i];
        i++;
    }
    size = n;
}
ArrayList::ArrayList(int n, int value)
{
    size = n;
    int i = 0;
    while (i < n)
    {
        *data++ = value;
    }
}
void ArrayList::insert(int pos, int value) {
   
    int i = pos;
    while (i < size)
    {
        data[i + 1] = data[i];
        i++;
    }
    data[pos] = value;
    size++;
}

void ArrayList::remove(int pos) {
    int i = pos;
    while (i < (size - 1))
    {
        data[i] = data[i + 1];
        i++;
    }
    size--;
}

int  ArrayList::at(int pos)const {
    return data[pos];
}

void ArrayList::modify(int pos, int newValue) {
    data[pos] = newValue;
}
#include "LinkedList.h"
#include<iostream>
using namespace std;
#include<string.h>

void LinkedList::disp(ostream& os)const {
    Node* pointer = head->next;
    int i = 0;
    while (i++ < size)
    {
        cout << pointer->data << " ";
        pointer = pointer->next;
    }
    cout<<endl;
}
LinkedList::LinkedList()
{
    size = 0;
    head = new Node;
    head->next = NULL;

}
//拷贝构造函数,构造一个逻辑上与参数内容相同的链表
LinkedList::LinkedList(const LinkedList& rhs)
{
    head = new Node;
    head->next = NULL;

    size = rhs.size;
    Node* pointer1 = head;           //让指针一号指到当前链表的头
    Node* pointer2 = rhs.head->next;//让指针二号指到  引用链表的头中的next指针所指到的下一个节点

    while (pointer2)
    {
        pointer1->next = new Node;//先给他开空间,开了空间再指向他,准备给他安东西
        pointer1 = pointer1->next;

        pointer1->data = pointer2->data;
        pointer1->next = NULL;//不要让结点里的next指针为空
        pointer2 = pointer2->next;//让指针二号移位到下一个结点去

    }
}
//    //原生数组构造函数,构造一个内容与给定数组相同的链表
LinkedList::LinkedList(int const a[], int n)
{
    head = new Node;
    head->next = NULL;

    size = n;
    Node* pointer = head;
    for (int i = 0; i < n; i++)
    {
        pointer->next = new Node;
        pointer = pointer->next;
        pointer->data = a[i];
        pointer->next = NULL;//不要让结点里的next指针为空
    }
}
//    //填充构造函数,构造一个内容为n个value的链表
LinkedList::LinkedList(int n, int value)
{
    size = n;
    head = new Node;
    head->next = NULL;

    Node* toolman = head;

    for (int i = 0; i < n; i++)
    {
        toolman->next = new Node;
        toolman = toolman->next;

        toolman->data = value;
        toolman->next = NULL;
    }

}
LinkedList::~LinkedList()
{
    Node* toolman1 = head;
    Node* toolman2 = head;

    while (toolman1->next)
    {
        toolman2 = toolman1->next;
        delete toolman1;
        toolman1 = toolman2;
    }
    head = NULL;
    delete toolman1;
    toolman1 = NULL;
    toolman2 = NULL;
}








void LinkedList::insert(int pos, int value) {
    Node* pointer1 = head;//首先要知道pos代表第几个节点

    int i = 0;
    while (i++ < pos) {
        pointer1 = pointer1->next;
    }//结束后pointer1指向的是pos位置的结点
    Node *newnode=new Node;
    newnode->data = value;
    newnode->next = new Node;
    newnode->next = pointer1->next;
    pointer1->next = newnode;
    size++;
}

void LinkedList::remove(int pos) {
    Node* pointer = head;
    int i = 0;
    while (i < pos )
    {
        pointer = pointer->next;
        i++;
    }
    pointer->next = pointer->next->next;
    size--;
}

int LinkedList::at(int pos)const {
    Node* pointer = head;
    int i = -1;
    while (i < pos)
    {
        pointer = pointer->next;
        i++;
    }
    return pointer->data;
}


void LinkedList::modify(int pos, int newValue) {
    Node* pointer = head;
    int i = -1;
    while (i < pos)
    {
        pointer = pointer->next;
        i++;
    }
    pointer->data = newValue
    ;
}

第二关

/****************start from here**********************/
/****************start from here**********************/
#include "ArrayList.h"
#include<string.h>
#include<iostream>
using namespace std;

/****************start from here**********************/
using std::ostream;
ostream& operator << (ostream&os, const ArrayList&rhs){
    rhs.disp(os);
    return os;
}

ArrayList::~ArrayList() {
    //delete data;
}
ArrayList::ArrayList() { size = 0; capacity = 0; data = new int; }
ArrayList::ArrayList(const ArrayList& rhs) { memcpy(data, rhs.data, 4 * sizeof(rhs.data)); size = rhs.size; capacity = rhs.capacity; }
ArrayList::ArrayList(int const a[], int n)
{
    int i = 0;
    while (i < n)
    {
        data[i] = a[i];
        i++;
    }
    size = n;
}
ArrayList::ArrayList(int n, int value)
{
    size = n;
    int i = 0;
    while (i < n)
    {
        *data++ = value;
    }
}
void ArrayList::insert(int pos, int value) {
   
    int i = pos;
    while (i < size)
    {
        data[i + 1] = data[i];
        i++;
    }
    data[pos] = value;
    size++;
}

void ArrayList::remove(int pos) {
    int i = pos;
    while (i < (size - 1))
    {
        data[i] = data[i + 1];
        i++;
    }
    size--;
}

int  ArrayList::at(int pos)const {
    return data[pos];
}

void ArrayList::modify(int pos, int newValue) {
    data[pos] = newValue;
}
/****************start from here**********************/
/****************start from here**********************/
#include "LinkedList.h"
#include<iostream>
using namespace std;
#include<string.h>
/****************start from here**********************/
using std::ostream;

using namespace std;

ostream& operator << (ostream&os, const LinkedList&rhs){
    rhs.disp(os);
    return os;
}




void LinkedList::disp(ostream& os)const {
    Node* pointer = head->next;
    int i = 0;
    while (i++ < size)
    {
        cout << pointer->data << " ";
        pointer = pointer->next;
    }
   
}
LinkedList::LinkedList()
{
    size = 0;
    head = new Node;
    head->next = NULL;

}
//拷贝构造函数,构造一个逻辑上与参数内容相同的链表
LinkedList::LinkedList(const LinkedList& rhs)
{
    head = new Node;
    head->next = NULL;

    size = rhs.size;
    Node* pointer1 = head;           //让指针一号指到当前链表的头
    Node* pointer2 = rhs.head->next;//让指针二号指到  引用链表的头中的next指针所指到的下一个节点

    while (pointer2)
    {
        pointer1->next = new Node;//先给他开空间,开了空间再指向他,准备给他安东西
        pointer1 = pointer1->next;

        pointer1->data = pointer2->data;
        pointer1->next = NULL;//不要让结点里的next指针为空
        pointer2 = pointer2->next;//让指针二号移位到下一个结点去

    }
}
//    //原生数组构造函数,构造一个内容与给定数组相同的链表
LinkedList::LinkedList(int const a[], int n)
{
    head = new Node;
    head->next = NULL;

    size = n;
    Node* pointer = head;
    for (int i = 0; i < n; i++)
    {
        pointer->next = new Node;
        pointer = pointer->next;
        pointer->data = a[i];
        pointer->next = NULL;//不要让结点里的next指针为空
    }
}
//    //填充构造函数,构造一个内容为n个value的链表
LinkedList::LinkedList(int n, int value)
{
    size = n;
    head = new Node;
    head->next = NULL;

    Node* toolman = head;

    for (int i = 0; i < n; i++)
    {
        toolman->next = new Node;
        toolman = toolman->next;

        toolman->data = value;
        toolman->next = NULL;
    }

}
LinkedList::~LinkedList()
{
    Node* toolman1 = head;
    Node* toolman2 = head;

    while (toolman1->next)
    {
        toolman2 = toolman1->next;
        delete toolman1;
        toolman1 = toolman2;
    }
    head = NULL;
    delete toolman1;
    toolman1 = NULL;
    toolman2 = NULL;
}


void LinkedList::insert(int pos, int value) {
    Node* pointer1 = head;//首先要知道pos代表第几个节点

    int i = 0;
    while (i++ < pos) {
        pointer1 = pointer1->next;
    }//结束后pointer1指向的是pos位置的结点
    Node *newnode=new Node;
    newnode->data = value;
    newnode->next = new Node;
    newnode->next = pointer1->next;
    pointer1->next = newnode;
    size++;
}

void LinkedList::remove(int pos) {
    Node* pointer = head;
    int i = 0;
    while (i < pos )
    {
        pointer = pointer->next;
        i++;
    }
    pointer->next = pointer->next->next;
    size--;
}

int LinkedList::at(int pos)const {
    Node* pointer = head;
    int i = -1;
    while (i < pos)
    {
        pointer = pointer->next;
        i++;
    }
    return pointer->data;
}


void LinkedList::modify(int pos, int newValue) {
    Node* pointer = head;
    int i = -1;
    while (i < pos)
    {
        pointer = pointer->next;
        i++;
    }
    pointer->data = newValue
    ;
}



#ifndef _LIST_H_
#define _LIST_H_

#include <iostream>
using namespace std;
using std::ostream;



class List{
protected:
    int size;

public:
    //¼æ¾ßĬÈϹ¹Ô캯ÊýºÍ¹¦Äܹ¹Ô캯Êý
    List(int s=0):size(s){}
    //¿½±´¹¹Ô캯Êý
    List(const List&rhs):size(rhs.size){}

    /*ÒÔÏÂΪÐ麯Êý*/
    //×÷Ϊ¼Ì³ÐµÄ»ùÀàµÄÎö¹¹º¯ÊýÒ»¶¨ÒªÊÇÐéµÄ
    virtual ~List(){}

    //ÆÕͨµÄ·ÇÐ麯Êý
    int getSize()const{return size;}

    /*ÒÔÏÂΪ´¿Ð麯Êý£¬¼´Ã»ÓÐʵÏÖ*/
    virtual void insert(int pos,int value)=0;
    virtual void remove(int pos)=0;
    virtual int at(int pos)const=0;
    virtual void modify(int pos,int newValue)=0;

    virtual void disp(ostream& os)const {
        for (int i = 0, n = size; i < n; ++i) {
            os << at(i) << " ";//注意,这里at函数并没有实现
                           //但不妨碍这么写
        }
        
    }
    
    /*ÄãµÄ¹¤×÷ÔÚÕâÀ´Ë´¦Éè¼Ædispº¯Êý*/
};

#endif // _LIST_H_

第三关

#ifndef _ILIST_H_
#define _ILIST_H_
#include<iostream>
#include<string.h>
using namespace std;
using std::ostream;

/****************start from here**********************/

// IList类只提供5个纯虚函数,分别是增、删、查、改和显示函数。
class IList{
    public:
    virtual void insert(int pos,int value)=0;
    virtual void remove(int pos)=0;
    virtual int at(int pos)const=0;
    virtual void modify(int pos,int newValue)=0;
};

#endif

点个赞,直接带走,不客气!

哈哈哈哈,知道大家都为啥来到这,我牛志伟接各种东西  qq+3640456339

学弟学妹们没事可以来我博客主页看看,有啥问题都可私信我。

  • 17
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很抱歉,作为一个AI服务助手,我不能提供或者介绍任何形式的作业答案,因为这违反了学术诚信的原则。但是,我可以为您提供一些关于C++数组实训的基本知识和思路,帮助您更好地完成作业C++数组是一种存储相同类型数据的集合,可以通过下标访问数组中的元素。在头歌实训作业中,您需要使用数组来实现朋友圈点赞功能。具体实现思路如下: 1.首先,您需要定义一个数组来存储每个朋友圈的点赞数。数组的大小应该与朋友圈的数量相同。 2.然后,您需要使用循环结构来读取每个朋友圈的点赞数,并将其存储到数组中。 3.接下来,您需要使用循环结构来遍历数组,找到点赞数最多的朋友圈,并输出其编号和点赞数。 下面是一个简单的C++代码示例,用于实现上述思路: ```cpp #include <iostream> using namespace std; int main() { const int N = 5; // 朋友圈数量 int likes[N]; // 存储点赞数的数组 // 读取每个朋友圈的点赞数 for (int i = 0; i < N; i++) { cout << "请输入第" << i+1 << "个朋友圈的点赞数:"; cin >> likes[i]; } // 找到点赞数最多的朋友圈 int maxIndex = 0; for (int i = 1; i < N; i++) { if (likes[i] > likes[maxIndex]) { maxIndex = i; } } // 输出点赞数最多的朋友圈的编号和点赞数 cout << "点赞数最多的朋友圈是第" << maxIndex+1 << "个朋友圈,点赞数为" << likes[maxIndex] << endl; return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值