C++数据结构---链表(链表节点创建)

来源:互联网 发布:室内装修设计软件 编辑:程序博客网 时间:2024/06/06 14:22

本文是为了以下创建链表更加方便,而编写的C++头文件,作用是创建一个节点类,此处不采用class,而用struct。

Struct和Class的区别在于:
二者的访问权限不同!!!!
前者:访问权限是public
后者:访问权限是private

节点类的头文件代码如下:

#ifndef LISTNODE_HH#define LISTNODE_HH#include<iostream>#define ListNodePosi(T) ListNode<T>* //后面使用方便,也可以不用此宏定义template <typename T> struct ListNode {    //成员    T data;    ListNodePosi(T) pred;//前驱节点,类型是ListNode型    LIstNodePosi(T) succ;//后继节点    ListNode() {}//默认构造函数    ListNode(T _Val, ListNodePosi(T) p = NULL, ListNodePosi(T) s = NULL) :data(_Val), pred(p), succ(s) {}//3个参数的构造函数    ListNodePosi(T) insertAsPred(T const& _Val);//作为前驱插入    ListNodePosi(T) insertAsSucc(T const& _Val);//作为后继插入};//作为前驱插入时,首先讲当前this节点的前驱的后继给待插入的节点x,然后再把前驱给x,前者是将x的前驱连接上,后者是将x的后继连接到当前this节点template <typename T>ListNodePosi(T) ListNode<T>::insertAsPred(T const& _Val){    ListNodePosi(T) x = new LideNode(_Val, pred, succ);    pred->succ = x; pred = x;    //(!!!注意!!!)这里必须是先pred->succ=x。因为如果pred=x先执行,那么this的前驱就是x了,在执行pred->succ时,pred->succ就是this本身。而不是this前一个节点。    return x;}//作为后继插入时,首先将当前this节点的***后继的前驱***给待插入的节点x,然后再把后继给x,前者是将x的后继连接上,后者是将x的前驱连接到当前this节点template <typename T>ListNodePosi(T) ListNode<T>::insertAsSucc(T const& _Val){    ListNodePosi(T) y = new LideNode(_Val, pred, succ);    succ->pred = x; succ = x;//(!!!注意!!!)这里解释同上    return x;}#endif

参考:
清华大学邓俊辉教授《数据结构》
在此基础上,做了些许修改,使之更容易理解与调用。

本系列文章仅用于记录,用于学习,没有商业用途。

阅读全文
1 0
原创粉丝点击