
更多详解www.hensysyw.cn
1、链表建立需要节点。这是存储数据的基础,以C++语言为例,要建立这样的节点(假设存储信息的类型作为一个模板)template <class DataType>
struct Node{
DataType info //节点存储的信息
Node<DataType>*next
}
2、因为你是使用指针,那么,就需要动态创建结构体。使用new 运算符在堆内存中创建
Node<DataType>*head = new Node<DataType>
堆内存和栈不同,你动态申请和释放都是在堆内存里,所以你不用担心调用一个函数,在
这个函数里动态申请了内存,返回之后没有了,在的。
3、插入节点
我们以插入头结点后边为例:
假设函数原型为:
void AddToFirst( Node<DataType>* head, DataType data )
那么函数主体中这样写:
{
Node<DataType>* ptr = new Node<DataType> //动态生成一个新的节点
ptr->info = data //存储传递过来的DataType类型的数据
ptr->next = head->next //先让ptr指向的地方为head指向的地方
head->next = ptr //再让头结点指向ptr
}
这样,添加到头结点之后的动作就完成了。
4、删除 *** 作
删除 *** 作需要查找是否存在要删除的数据,存在则删除,不存在不采取动作
函数原型:
void DeleteNode ( Node<DataType>*head, DataType data )
我们设置ptr作为遍历链表的游标,设置ptrNext指针作为ptr的下一个节点,将它里面的info与data对比;
设置两个指针是为了方便我们删除节点。
函数定义如下
{
Node<DataType>*ptr = head
Node<DataType>*ptrNext = prt->next
while( ptrNext &&ptrNext->info != data ){ //当ptrNext不是NULL且包含的数据不等于data时
ptr = ptrNext
ptrNext = ptrNext->next //ptr和ptrNext均往下移动一次
}
if( ! ptrNext ) //如果ptrNext == NULL
cout <<"链表中不存在此数据:" <<data <<endl
else{//那么跳出循环的情况就只能是ptrNext->info == data啦,此处删除ptrNext
ptr->next = ptrNext->next //释放ptrNext指向的堆内存之前,要把
//ptrNext之前的节点,也就是ptr,将其指向prtNext指向的地方
delete ptrNext //释放堆内存
cout <<"删除成功!" <<endl
}
}
关于链表的建立、添加节点、删除节点,还需要你自己多多琢磨。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)