链表
看图说话:
- 链表又称链式存储结构,顾名思义就是将一个一个单独的数据节点用一条链子将其串起来,从而形成一个整体;其中数据节点在c++中可以将其描述为struct(class也可以),其中包含有数据域和指针域;链子在c++中就是指针;
- 链表的好处:对于链子来说,我想串连那块内存就串连那块内存(自己的内存空间),不用受物理的约束(不像数组一样,其内存空间必须连续分配),如果条件允许,我可以一直无限的增加;对于数据节点的删除来说就更加简单了,我不想要你就把你从链子上去掉就可以了(数组的删除不仅需要将数据删除,还需要将其后面的元素向前搬,毕竟空一块也不太好吧)
- 链表的缺点:查找麻烦,对于链表的查找而言,就是顺藤摸瓜的过程,得一路找下去,毕竟节点一直都是单线联系;
一大波代码来袭:
#include<iostream>
using namespace std;
//数据节点
struct DataNode_int{
int data;
DataNode_int* next; //指向下一个指针域
};
//链表头
struct LinkHead{
LinkHead():next(NULL),end(NULL){} //构造即初始 -- 操碎了心
DataNode_int* next; //数据节点
DataNode_int* end; //链表尾部
};
//添加数据 --- 尾插法
void add_node_to_link(LinkHead* head,int node){
DataNode_int* data = new DataNode_int;
data->data = node;
data->next = NULL;
if(head->next){ //链表不为空
head->end->next = data;
head->end = data;
}else{
head->end = head->next = data;
}
}
//删除数据
void del_node(LinkHead* head,int data){
//遍历链表所有数据
DataNode_int* finder = head->next;
DataNode_int* deleter = head->next;
while(1){
if(!finder || finder->data == data){break;}
deleter = finder; //总是慢一步
finder = finder->next;
}
if(finder == deleter && finder != head->end){
head->next = finder->next;
}else if(finder == head->end){
head->end = deleter;
deleter->next = NULL;
}else{
deleter->next = finder->next;
}
delete finder; //释放资源
}
//打印链表
void print_link(LinkHead* head){
DataNode_int* printer = head->next;
while(1){
if(!printer){break;}
cout<<printer->data <<ends;
printer = printer->next;
}
}
//查找链表指定节点
DataNode_int* find(LinkHead* head,int data){
DataNode_int* finder = head->next;
while(1){
if(!finder || finder->data == data) {break;}
finder = finder->next;
}
return finder;
}
以上代码仅代表个人理解
本文仅为日常学习记录,留待日后查看