c++实现链表的基本操作
来源:互联网 发布:中草药识别软件 编辑:程序博客网 时间:2024/06/05 10:54
头文件:(新加结点类)
#ifndef LIST_H#define LIST_Hclass Node{public: int data; Node *next; void printNode();};class List{public: List(); ~List(); void clearList(); bool isEmpty(); int ListLength(); bool getElem(int i,Node *pNode); int locateElem(Node *pNode); bool priorElem(Node *pCurrentNode,Node *pPreNode); bool nextElem(Node *pCurrentNode,Node *pNextNode); void ListTraverse(); bool listInsert(int i,Node *pNode); bool listDelete(int i,Node *pNode); bool listInsertHead(Node *pNode); bool listInsertTail(Node *pNode);private: Node *m_pList; int m_iLength;};#endif
基本代码实现:
#include "List.h"#include <iostream>using namespace std;void Node::printNode(){ cout<<data<<endl;}List::List(){ m_pList=new Node; m_pList->data=0; m_pList->next=NULL; m_iLength=0;}bool List::isEmpty(){ return m_iLength==0?true:false;}int List::ListLength(){ return m_iLength;}void List::clearList(){ Node *currentNode=m_pList->next; while(currentNode->next!=NULL){ Node *temp=currentNode->next; delete currentNode; currentNode=temp; } m_pList->next=NULL; m_iLength=0;}List::~List(){ clearList(); delete m_pList; m_pList=NULL;}bool List::listInsertHead(Node *pNode){ Node *temp=m_pList->next; Node *newNode=new Node; if (newNode== NULL) {return false; } newNode->data=pNode->data; m_pList->next=newNode; newNode->next=temp; m_iLength++; return true;}bool List::listInsertTail(Node *pNode){ Node *currentNode=m_pList; while(currentNode->next!=NULL){ currentNode=currentNode->next; } Node *newNode=new Node; if (newNode==NULL) { return false; } newNode->data=pNode->data; newNode->next=NULL; currentNode->next=newNode; m_iLength++; return true;}bool List::listInsert(int i,Node *pNode){ if (i<0||i>m_iLength) { return false; } Node *currentNode=m_pList; for (int k=0;k<i;k++) { currentNode=currentNode->next; } Node *newNode=new Node; if (newNode==NULL) { return false; } newNode->data=pNode->data; newNode->next=currentNode->next; currentNode->next=newNode; m_iLength++; return true;}bool List::listDelete(int i,Node *pNode){ if (i<0||i>=m_iLength) { return false; } Node *currentNode=m_pList; Node *currentNodeBef=NULL; for (int k=0;k<=i;k++) { currentNodeBef=currentNode; currentNode=currentNode->next; } currentNodeBef->next=currentNode->next; pNode->data=currentNode->data; delete currentNode; currentNode=NULL; m_iLength--; return true;}int List::locateElem(Node *pNode){ Node *currentNode=m_pList; int loc=0; while(currentNode->next!=NULL){ currentNode=currentNode->next; if (currentNode->data==pNode->data) { return loc; } loc++; } return -1;}bool List::getElem(int i,Node *pNode){ if (i<0||i>=m_iLength) { return false; } Node *currentNode=m_pList; for (int k=0;k<=i;k++) { currentNode=currentNode->next; } pNode->data=currentNode->data; return true;} bool List::priorElem(Node *pCurrentNode,Node *pPreNode){ Node *currentNode=m_pList; Node *tempNode=NULL; while(currentNode->next!=NULL){ tempNode=currentNode; currentNode=currentNode->next; if (currentNode->data==pCurrentNode->data) { if (tempNode==m_pList) {return false; } pPreNode->data=tempNode->data; return true; } } return false;}bool List::nextElem(Node *pCurrentNode,Node *pNextNode){ Node *currentNode=m_pList; while(currentNode->next!=NULL){ currentNode=currentNode->next; if (currentNode->data==pCurrentNode->data) { if (currentNode->next==NULL) { return false; } pNextNode->data=currentNode->next->data; return true; } } return false;}void List::ListTraverse(){ Node *currentNode=m_pList; while(currentNode->next!=NULL){ currentNode=currentNode->next; currentNode->printNode(); }}
效果:
#include <iostream>#include "List.h"using namespace std;int main(){ Node e1; Node e2; Node e3; Node e4; Node e5; List *p=new List(); e1.data=5; e2.data=9; e3.data=4; e4.data=6; e5.data=8; Node e; e.data=24; p->listInsertHead(&e1); p->listInsertHead(&e2); p->listInsertTail(&e3); p->listInsertTail(&e4); p->listInsertHead(&e5); p->ListTraverse(); cout<<endl; p->listInsert(3,&e); p->ListTraverse(); cout<<endl; p->listDelete(2,&e); cout<<"删除:"<<e.data<<endl; p->ListTraverse(); cout<<"表元素个数:"<<p->ListLength()<<endl; cout<<endl; p->getElem(5,&e); e.printNode(); cout<<endl; cout<<p->locateElem(&e1)<<endl; cout<<p->locateElem(&e2)<<endl; p->nextElem(&e2,&e); cout<<"e2的后继"<<e.data<<endl; p->priorElem(&e2,&e); cout<<"e2的前驱"<<e.data<<endl<<endl; p->clearList(); if(p->isEmpty()) cout<<"Empty"<<endl; return 0;}
阅读全文
1 0
- 链表的基本操作(c链表实现)
- 链表的基本操作(c实现)
- C语言实现双向链表的基本操作
- C语言实现双向链表的基本操作
- c语言实现静态链表的基本操作
- c语言实现循环链表的基本操作
- c语言实现双向链表的基本操作
- 栈的基本操作(c链表实现)
- C语言实现链表的基本操作
- C语言 链表的基本操作实现 源码
- 链表的基本操作函数算法(C/C++实现)
- 单向链表的C语言实现与基本操作
- C语言实现链表基本操作
- 线性链表基本操作实现(C/C++)
- 用C语言实现链栈的基本操作
- C语言实现链队列的基本操作
- 链栈的基本操作实现(c语言)
- 链表的基本操作(C++)
- Java 开发的日志建议规范
- Unity Shader入门精要笔记(四):矩阵与空间变换
- 精华钜献!三种获取类的对象的方式
- 实战
- python打乱数组顺序
- c++实现链表的基本操作
- 第一个程序从Hello world!Objective-c 开始
- 设计模式之观察者模式
- C++操作 XML
- IOS异常的处理
- OpenWRT路由器——网络打印服务器
- 论文阅读RCNN
- windows 窗口实现隐藏任务栏预览
- Android--开发人员不得不收集的代码