原创作者:Daniel
时间:2017.9.28
地点:大连理工大学软件学院
线性表定义:具有相同数据类型的n个数据元素按顺序排列成的一组关系。
线性表的特点:
1、有唯一头元素
2、有唯一尾元素
3、除头节点外,每一个元素都有一个直接前驱
4、除尾节点外,每一个元素都有一个直接后继
5、具有反对称性和可传递性
线性表的存储结构:
1、链式存储
通过申请连续的静态数组空间来实现线性表,数据之间的关系又数据的实际物理地址所反应。
2、顺序存储
使用指针将数据的前驱后继关系表示出来,并且通过指针遍历来访问节点元素
代码实现:
1、顺序表
template<typename T>
class List{
private:
T* arraylist;
int size;
int curLen;
public:
List(int size){
arraylist = new T[size];
this->size = size;
curLen = 0;
}
~List(){
delete [] arraylist;
curLen = 0;
}
bool append(T& a){
if(curLen + 1 > this->size){
return false;
}
arraylist[curLen] = a;
return true;
}
bool insert(T& a, int address){
if(address > size - 1 || address < 0){
return false;
}
for(int i = curLen - 1; i >= address ; i--){
arraylist[i + 1]= arraylist[i];
}
arraylist[address] = a;
return true;
}
};
2.链表
template <typename T>
class List{
private:
Node<T>* head;
int size;
public:
List(int size){
this->size = size;
head = new Node<T>;
Node<T> * temp = head;
for(int i = 0 ; i < size; i++){
Node<T>* p = new Node<T>;
p->next = NULL;
temp ->next = p;
temp = p;
}
}
~List(){
Node<T>* temp = head;
while(temp) {
delete temp;
temp = temp->next;
}
}
bool append(T& a);
bool insert(T& a, int address);
int find(T& a);
bool write(T&a , int address);
};
循环链表与双向链表
双向链表是在节点中添加了前驱指针和后继指针变量,可以双向遍历。
循环链表中就是将尾节点的next = head;构成一个循环。循环链表为空是 head-> next = head;