第一关
#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
学弟学妹们没事可以来我博客主页看看,有啥问题都可私信我。