#ifndef _linknode_h_ #define _linknode_h_ class Node { private: Node* pNext; void* pData; public: Node(void* pData); ~Node(); bool equals(const Node& node) ; Node* next(); void setNext(const Node& node); void* data()const ; }; class SingleLinkedList { private: Node* head; Node* tail; public: SingleLinkedList(); ~SingleLinkedList(); void push_front(void* data); void push_back(void* data); void remove(void* data); void display(); }; #endif
---------------------
#include "link.h" #include <iostream> using namespace std; int main() { int a=5,b=1,c=2,d=5,e=9; Node n(&a); Node n2(&b); Node* n3=new Node(&a); Node* n4=new Node(&d); //cout<<n.equals(n)<<endl; cout<<n4->equals(*n3)<<endl; cout<<*(int*)(n.data())<<endl; n.setNext(n3); cout<< *(int*)(n.next()->data())<<"-------以上是测试Node--------"<<endl; SingleLinkedList link ; link.push_front(&a); link.push_front(&b); link.push_front(&e); link.push_back(&c); link.remove(&d); link.display(); return 0; } Node::Node(void* pData):pData(pData),pNext(NULL) { } Node::~Node() { } bool Node::equals(const Node& node) { int* idata= (int*)pData; int* ndata= (int*)(node.data()); if((*idata)==(*ndata)) return true; else return false; } void* Node::data()const { return pData; } void Node::setNext(const Node& node) { this->pNext=const_cast<Node*>(&node); } Node* Node::next() { return pNext; } SingleLinkedList::SingleLinkedList():head(0),tail(0) { } SingleLinkedList::~SingleLinkedList() { Node* tmp=head; while(tmp!=NULL){ tmp->~Node(); tmp = tmp->next(); } } void SingleLinkedList::display() { Node* tmp=head; while(tmp!=NULL){ cout<< *(int*)(tmp->data())<<endl; tmp = tmp->next(); } } void SingleLinkedList::push_front(void *data) { Node* node=new Node(data); if(this->head==NULL) { this->head=node; this->tail=node; cout<<"在空链表中插入了个头结点"<<endl; } else{ node->setNext(*head); this->head= node; //cout<<"非空链表"<<endl; } cout<<"从前面插入一个结点"<<*(int*)data<<endl; } void SingleLinkedList::push_back(void* data) { Node* node=new Node(data); if(this->tail==NULL) { this->head=node; this->tail=node; } else{ this->tail->setNext(*node); tail=node; } cout<<"从后面插入一个结点"<<*(int*)data<<endl; } void SingleLinkedList::remove(void* data) { //Node* currentData=new Node(data);隐式转化 Node* temp=this->head; Node* preNode=NULL; while(temp!=NULL) { if(temp->equals(data)) { if(temp==this->head){ cout<<"不好, head结点"<<*(int*)temp->data()<<"要被删掉了"<<endl; this->head=temp->next(); temp->~Node(); }else { preNode->setNext(*(temp->next())); temp->~Node(); } return; } preNode=temp; temp=temp->next(); } }
相关推荐
总结来说,这段C++代码演示了如何通过迭代方式反转一个单链表。这种算法的时间复杂度是O(n),其中n是链表的长度,因为它只遍历一次链表。空间复杂度为O(1),因为我们仅使用了常数个额外的指针变量。理解这个过程对于...
以下是一个简单的C++单链表选择排序的实现: ```cpp #include "sort.h" void selectionSort(ListNode*& head) { if (head == nullptr || head->next == nullptr) { return; } ListNode* minNode = head; ...
c++单链表的基本操作
C++单链表的实现,包含Create(),Print(const node *head),Delete(node *head,int num)等简单的函数
C++单链表实现大数加法 大数加法是一种常见的算法问题,特别是在C++中实现大数加法时需要考虑到数字的位数和溢出问题。使用单链表来实现大数加法可以解决这个问题。本文将详细介绍如何使用C++单链表实现大数加法。 ...
在本项目"C++单链表实现的图书管理系统"中,主要涉及了数据结构中的单链表概念以及如何利用C++编程语言设计一个简单的图书管理软件。这个系统通过单链表来存储图书信息,并且实现了文件操作,使得图书数据能够持久化...
// 以下是自己写的基于C++的双向循环链表的创建及其一些操作与实现(于VC下通过),没用模板, // 也没用类,所以比较适合有一点C++语言基础入门者,但可移植不够.有什么bug的话,欢迎指出。 // 或有什么问题也可以联系...
1、单链表基本操作的实现 [问题描述]要在带头结点的单链表h中第i个数据元素之前插入一个数据元素x ,首先需要在单链表中寻找到第i-1个结点并用指针p指示,然后申请一个由指针s 指示的结点空间,并置x为其数据域值,...
单链表的逆序排列,用的是c++语言的,程序正确能够运行,易懂
在这个“C++单链表类模板”中,我们将探讨如何利用C++的类模板来实现一个通用的单链表数据结构,并讨论其核心功能和设计思路。 首先,我们需要定义一个链表节点。节点通常包含两个部分:一个是存储数据的成员变量,...
c++单链表的设计与实现。采用c++类实现单链表,而不是结构体。
根据给定的文件信息,我们可以总结出以下关于C++单链表实现的关键知识点: ### 1. 序列列表(SeqList)类定义 #### 类模板定义 ```cpp template class SeqList { // 类成员声明 }; ``` - `template <class T>`:...
用c++创建单链表、单链表的删除、单链表的插入、求单链表的长度
在本课程设计中,我们关注的是“数据结构 通讯录管理 课程设计C++单链表版”,这是一项以C++编程语言实现的项目,它利用了数据结构中的单链表来有效地管理通讯录信息。单链表是计算机科学中基础且重要的数据结构之一...
总的来说,这个C++单链表模版提供了一套全面的链表操作接口,对于学习数据结构和C++编程的人来说,是一个很好的实践和参考资源。通过使用和改进这个模版,可以深入理解链表数据结构和C++面向对象编程的概念。
C++单链表的创建方法,包括头插法、尾插法
### C++ 单链表实现多项式乘法 #### 实习任务及需求分析 本次实习的任务是使用C++编程语言,通过单链表的数据结构来实现两个多项式的相乘操作。这一过程涉及到对多项式的理解、单链表的运用以及算法的设计与优化。...
本文将详细解析C++中的单链表,并结合提供的“C++单链表小程序”进行讲解,适合大一新生作为学习材料。 单链表是链表的一种类型,每个节点包含两部分:数据域和指针域。数据域存储实际的数据,而指针域存储指向下一...
通过以上步骤,我们就可以实现C++单链表对集合的交、并、差运算,并实现从文件读取和保存结果的功能。这样的实现既锻炼了对链表的理解,也展示了对文件操作的掌握,是数据结构和算法应用的一个好例子。
总的来说,`C++单链表类(实现丰富)`的学习涵盖了链表的基本操作和高级应用,是数据结构和算法学习的重要组成部分。通过深入研究`LLink`类的源代码,你可以更深入地了解链表的工作原理,并提升在实际项目中的应用...