如何在链表里添加各种类型的元素?

如何在链表里添加各种类型的元素?,第1张

用union吧 union type{int x,double y,float z}你把每个链表元素都定义为type类型,那么你想是那样类型都可以呀

更多详解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

}

}

关于链表的建立、添加节点、删除节点,还需要你自己多多琢磨。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/7890008.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-11
下一篇2023-04-11

发表评论

登录后才能评论

评论列表(0条)

    保存