头歌实验:虚函数

#include "ArrayList.h"
 
/****************start from here**********************/
#include"List.h"
#include<iostream>
using namespace std;
  ArrayList::ArrayList()
    {
        data=new int[1005];
        capacity=0;
        size=0;
    }
   ArrayList::~ArrayList()
    {
        delete [] data;
    }
 
    void ArrayList::insert(int pos,int value)
    {
        data[pos]=value;
        capacity++;
        size++;
    }
    void ArrayList::remove(int pos)
    {
        for(int i=0;i<capacity;i++) 
            data[i]=data[i+1];
        capacity--;
        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;
/****************start from here**********************/
LinkedList::LinkedList() : List(0)
{
	head = new Node();
}
 
LinkedList::LinkedList(const LinkedList &rhs) : List(rhs.size)
{
	head = new Node;
	Node *p = head;
	for (Node *q = rhs.head->next; q; q = q->next)
	{
		p->next = new Node(q->data, q->next);
		p = p->next;
	}
}
 
LinkedList::LinkedList(int const a[], int n) : List(n)
{
	head = new Node();
	Node *p = head;
	for (int i = 0; i < size; i++)
	{
		p->next = new Node(a[i], nullptr);
		p = p->next;
	}
}
 
LinkedList::LinkedList(int n, int value) : List(n)
{
	head = new Node();
	Node *p = head;
	for (int i = 0; i < size; i++)
	{
		p->next = new Node(value, nullptr);
		p = p->next;
	}
}
 
LinkedList::~LinkedList()
{
	Node *p = head;
	while (head->next != NULL)
	{
		p = head->next;
		delete head;
		head = p;
	}
	delete head;
}
 
void LinkedList::insert(int pos, int value)
{
	Node *p = head;
	for (int i = -1; i < pos - 1; i++)
	{
		p = p->next;
	}
	Node *q = new Node(value, p->next);
	p->next = q;
	size++;
}
void LinkedList::remove(int pos)
{
	Node *p = head;
	for (int i = -1; i < pos - 1; i++)
	{
		p = p->next;
	}
	Node *q = head;
	for (int j = -1; j < pos + 1; j++)
	{
		q = q->next;
	}
	p->next = q;
	size--;
}
 
int LinkedList::at(int pos) const
{
	Node *p = head;
	for (int i = -1; i < pos; i++)
	{
		p = p->next;
	}
	return p->data;
}
 
void LinkedList::modify(int pos, int newValue)
{
	Node *p = head;
	for (int i = -1; i < pos; i++)
	{
		p = p->next;
	}
	p->data = newValue;
}
void LinkedList::disp(ostream &os) const
{
	Node *p = head;
	while (p->next != NULL)
	{
		p = p->next;
		cout << p->data << " ";
	}
	cout << endl;
}

/****************start from here**********************/
#include"ArrayList.h"
#include<iostream>
using namespace std;
ArrayList::ArrayList()
{
	size = 0;
	data = new int[10];
	capacity = 10;
}
 
ArrayList::ArrayList(const ArrayList &rhs)
{
	data = new int[rhs.capacity];
	size = rhs.size;
	for (int i = 0; i < size; i++)
	{
		data[i] = rhs.data[i];
	}
}
 
ArrayList::ArrayList(int const a[], int n)
{
	data = new int[n];
	size = n;
	for (int i = 0; i < n; i++)
	{
		data[i] = a[i];
	}
}
 
ArrayList::ArrayList(int n, int value)
{
	data = new int[n];
	size = n;
	for (int i; i < n; i++)
	{
		data[i] = value;
	}
}
 
ArrayList::~ArrayList()
{
	delete[] data;
}
 
void ArrayList::insert(int pos, int value)
{
 
	if (size == capacity)
	{
		int *old = data;
		data = new int[2 * size];
		for (int i = 0; i < size; i++)
		{
			data[i] = old[i];
		}
		capacity = 2 * size;
	}
	for (int i = size - 1; i >pos; i--)
		data[i + 1] = data[i];
	data[pos] = value;
	size++;
}
 
void ArrayList::remove(int pos)
{
	for (int i = pos; i < size - 1; i++)
		data[i] = data[i + 1];
	size--;
}
int ArrayList::at(int pos) const
{
	return data[pos];
}
void ArrayList::modify(int pos, int newValue)
{
	data[pos] = newValue;
}
void ArrayList::setCapacity(int newCapa)
{
    if(newCapa<capacity)
        return ;
    else
    {
        capacity=newCapa;
        int *newdata=new int[capacity];
        for(int i=0;i<size;i++)
        {
            newdata[i]=data[i];
        }
        delete[]data;
        data=newdata;
    }
}

#include"LinkedList.h"
#include<iostream>
using namespace std;
LinkedList::LinkedList() : List(0)
{
	head = new Node();
}
 
LinkedList::LinkedList(const LinkedList &rhs) : List(rhs.size)
{
	head = new Node;
	Node *p = head;
	for (Node *q = rhs.head->next; q; q = q->next)
	{
		p->next = new Node(q->data, nullptr);
		p = p->next;
	}
}
 
LinkedList::LinkedList(int const a[], int n) : List(n)
{
	head = new Node();
	Node *p = head;
	for (int i = 0; i < n; i++)
	{
		p->next = new Node(a[i], nullptr);
		p = p->next;
	}
}
 
LinkedList::LinkedList(int n, int value) : List(n)
{
	head = new Node();
	Node *p = head;
	for (int i = 0; i < n; i++)
	{
		p->next = new Node(value, nullptr);
		p = p->next;
	}
}
 
LinkedList::~LinkedList()
{
	Node *p = head;
	while (head->next != NULL)
	{
		p = head->next;
		delete head;
		head = p;
	}
	delete head;
}
LinkedList::Node* LinkedList::advance(int pos)const
{
    Node *p=head;
    for(int i=-1;i<pos;i++)
    {
        p=p->next;
    }
    return p;
}
 
void LinkedList::insert(int pos, int value)
{
	Node *p = head;
	for (int i = -1; i < pos - 1; i++)
	{
		p = p->next;
	}
	Node *q = new Node(value, p->next);
	p->next = q;
	size++;
}
void LinkedList::remove(int pos)
{
	Node *p = head;
	for (int i = -1; i < pos - 1; i++)
	{
		p = p->next;
	}
	Node *q = head;
	for (int j = -1; j < pos + 1; j++)
	{
		q = q->next;
	}
	p->next = q;
	size--;
}
 
int LinkedList::at(int pos) const
{
	Node *p = head;
	for (int i = -1; i < pos; i++)
	{
		p = p->next;
	}
	return p->data;
}
 
void LinkedList::modify(int pos, int newValue)
{
	Node *p = head;
	for (int i = -1; i < pos; i++)
	{
		p = p->next;
	}
	p->data = newValue;
}
 
void LinkedList::disp(ostream &os) const
{
	Node *p = head;
	while (p->next != NULL)
	{
		p = p->next;
		cout << p->data << " ";
	}
}

#ifndef _LIST_H_
#define _LIST_H_
 
#include <iostream>
using std::ostream;
using namespace std;
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;
 
    /*ÄãµÄ¹¤×÷ÔÚÕâÀ´Ë´¦Éè¼Ædispº¯Êý*/
    virtual void disp(ostream&os)const
    {
        for(int i=0,n=getSize();i<n;i++)
        {
            os<<at(i)<<" ";
        }
    }
 
 
 
 
 
 
};
 
#endif // _LIST_H_
#ifndef _ILIST_H_
#define _ILIST_H_
/****************start from here**********************/
#include<iostream>
using namespace std;
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;
    virtual void disp(ostream&os)const{};
};
 
 
#endif

如有侵权可联系删除

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值