1.单向链表
1.1 链表的结构体
单向链表中: 指针域存放的是下一个链表的地址,所以用 struct LinkNode * next
1.2 链表的初始化
注意:void *是指针,代指任意的数据类型的指针
1.3 插入新元素
pCurrent 是链表的地址 mylist是一个指针,mylist->pHeader 是头链表,&mylist->pHeader 是头链表的地址。
1.4 链表的遍历
pCurrent 是指针,指向第一个有数据的节点的地址。
在C语言中,函数名就是函数的首地址,所以将函数作为函数参数的思路是将函数地址传入,形参是一个指针类型的变量,形参的基类型为函数原型。
1.5 链表节点的删除
(1)按照节点位置删除
(2)按照值删除
1.6 链表的清空和销毁
#include<iostream>
using namespace std;
//创建链表结构
//template<class T1>
class linknode {
public:
int data;
linknode* next;
};
//创建单向链表类
//template<class T1>
class linklist {
public:
linknode* Header;
int m_size;
public:
//无参构造
linklist() {
Header = NULL;
m_size = 0;
}
//初始化链表
void link_init() {
Header = new linknode;
}
//打印链表
void printlist() {
linknode* current = Header->next;
for (int i = 0; i < m_size; i++) {
cout << current->data<<" ";
current = current->next;
}
cout << endl;
}
//尾插链表
void push_back(int data) {
linknode* list = Header;
linknode* current = new linknode;
for (int i = 0; i <m_size ;i++) {
list = list->next;
}
current->data = data;
list->next = current;
m_size++;
}
//按照节点位置插入
void my_insert(int pos ,int data) {
linknode* pre_list = Header;
linknode* current = new linknode;
for (int i = 0; i < pos; i++) {
pre_list = pre_list->next;
}
current->data = data;
current->next = pre_list->next;
pre_list->next = current;
m_size++;
}
//删除固定位置的节点
void my_delete(int pos) {
linknode* pre_list = Header;
linknode* current ;
for (int i = 0; i < pos; i++) {
pre_list = pre_list->next;
}
current = pre_list->next;
pre_list->next = current->next;
delete(current);
m_size--;
}
};
class person {
public:
person(string name, int age) {
this->m_name = name;
this->m_age = age;
}
string m_name;
int m_age;
};
int main() {
linklist list1 ;
list1.link_init();
person p1("zhangsan", 10);
list1.push_back(1);
list1.push_back(2);
list1.push_back(3);
list1.printlist();
list1.my_insert(2, 100);
list1.printlist();
list1.my_delete(2);
list1.printlist();
return 0;
}