计算机算法Day2 ---- 基本数据结构(链表)

链表

看图说话:
计算机算法Day2 ---- 基本数据结构(链表)

  1. 链表又称链式存储结构,顾名思义就是将一个一个单独的数据节点用一条链子将其串起来,从而形成一个整体;其中数据节点在c++中可以将其描述为struct(class也可以),其中包含有数据域和指针域;链子在c++中就是指针;
  2. 链表的好处:对于链子来说,我想串连那块内存就串连那块内存(自己的内存空间),不用受物理的约束(不像数组一样,其内存空间必须连续分配),如果条件允许,我可以一直无限的增加;对于数据节点的删除来说就更加简单了,我不想要你就把你从链子上去掉就可以了(数组的删除不仅需要将数据删除,还需要将其后面的元素向前搬,毕竟空一块也不太好吧)
  3. 链表的缺点:查找麻烦,对于链表的查找而言,就是顺藤摸瓜的过程,得一路找下去,毕竟节点一直都是单线联系;
    一大波代码来袭:
#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;
}

以上代码仅代表个人理解

本文仅为日常学习记录,留待日后查看

上一篇:Ajax.Day2.Ajax的一些基本操作


下一篇:day2