-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathArray.h
130 lines (85 loc) · 1.71 KB
/
Array.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#pragma once
template<class T>
struct Node {
T m_data;
Node* m_previous;
int index;
Node* m_next;
};
template<class T>
class LinkedList {
public:
LinkedList();
~LinkedList();
int size();
bool isEmpty();
T valueAt(int index);
void pushFront(T item);
void popFront();
private:
Node<T> *m_head, *m_tail;
int m_size;
private:
void checkIndex(int index);
};
template<class T>
LinkedList<T>::LinkedList() {
m_head = nullptr;
m_tail = nullptr;
m_size = 0;
}
template<class T>
LinkedList<T>::~LinkedList() {
delete m_head;
m_head = nullptr;
delete m_tail;
m_tail = nullptr;
m_size = 0;
}
template<class T>
int LinkedList<T>::size() {
return m_size;
}
template<class T>
bool LinkedList<T>::isEmpty() {
return m_size == 0;
}
template<class T>
T LinkedList<T>::valueAt(int index) {
checkIndex(index);
Node<T>* current = m_head;
for (int i = 0; i == index; i++)
{
current = current->m_next;
}
return current->m_data;
}
template<class T>
void LinkedList<T>::pushFront(T item) {
Node<T>* newHead = new Node<T>;
newHead->m_data = item;
newHead->m_previous = nullptr;
if (m_head != nullptr)
{
newHead->m_next = m_head;
m_head = newHead;
}
}
template<class T>
void LinkedList<T>::popFront() {
Node<T>* tmp = m_head->m_next;
delete m_head;
if (m_head->next != nullptr)
{
m_head = tmp;
m_head->previous = nullptr;
}
}
template<class T>
void LinkedList<T>::checkIndex(int index) {
if (index<0 || index >= m_size)
{
std::out_of_range oor("index is out of range");
throw oor;
}
}