算法1:链表的基本操作
2017-02-28 18:07
337 查看
算法1:链表的基本操作
编程实现链表的基本操作,包括插入,删除,查找,逆序,打印,获取长度等基本操作。用c++实现如下:
定义LinkList头文件
#include <iostream> #include <string.h> //链表数据结构体 struct Node { int data; Node* next; Node(int _data):data(_data),next(NULL){} }; class LinkList { public: //构造函数 LinkList(); //析构函数 ~LinkList(); //链表头部插入节点 void InsertHead(int data); //链表插入节点 void Insert(int data,int pos); //链表删除节点 void Remove(int data); //链表查找节点 int Find(int data); //获取链表长度 int Length(); //打印链表 void Print(); //逆序操作 void Reverse(); private: Node* head; int length; };
LinkList实现如下:
#include "stdafx.h" #include "LinkList.h" using namespace std; LinkList::LinkList() { head = NULL; length = 0; } LinkList::~LinkList() { Node* tmp; while(head != NULL) { tmp = head; head = head->next; delete tmp; } } void LinkList::Insert(int data,int pos) { if(pos < 0) { cout<<"please input correct position: "<<pos<<endl; return; } Node* node = new Node(data); //pos=0表示插入头节点 if(pos == 0) { node->next = head; head = node; length++; return; } int index = 1; Node* tmp = head; while(tmp != NULL && index < pos) { tmp = tmp->next; index++; } if(tmp == NULL) { cout<<"can't insert node in pos"<<pos<<endl; return; } node->next = tmp->next; tmp->next = node; length++; } void LinkList::InsertHead(int data) { Insert(data,0); } int LinkList::Find(int data) { Node* tmp = head; for(int i = 0; i < length; i++) { if(tmp != NULL && tmp->data == data) { return i+1; } tmp = tmp->next; } return -1; } void LinkList::Remove(int data) { int pos = Find(data); if(pos < 0) { cout<<"this data is not exist, so can't remove it. data="<<data<<endl; return; } //需要考虑删除头节点的问题 if(pos == 1) { head = head->next; length--; return; } int index = 2; Node* tmp = head; while(index < pos) { tmp = tmp->next; index++; } tmp->next = tmp->next->next; length--; } int LinkList::Length() { return length; } void LinkList::Print() { if(head == NULL) { cout<<"linklist is empty"<<endl; return; } Node* tmp = head; cout<<"linklist is "; while(tmp != NULL) { cout<<tmp->data<<" "; tmp = tmp->next; } cout<<endl; } void LinkList::Reverse() { if(head == NULL) { cout<<"linklist is empty"; return; } Node* curNode = head; Node* nextNode = head->next; Node* tmp; while(curNode != NULL && nextNode != NULL) { tmp = nextNode->next; nextNode->next = curNode; curNode = nextNode; nextNode = tmp; } head->next = NULL; head = curNode; }
编写测试代码如下:
int _tmain(int argc, _TCHAR* argv[]) { LinkList link; cout<<"insert head: "; int data; cin>>data; link.InsertHead(data); int length = 8; int index = 1; cout<<"insert data:"; while(index < length) { cin>>data; link.Insert(data,index); index++; } cout<<"the result after insert:"<<endl; link.Print(); cout<<"length = "<<link.Length()<<endl; cout<<"please input an exist data for testing remove function"<<endl; cin>>data; link.Remove(data); cout<<"length = "<<link.Length()<<endl; cout<<"the result after remove:"<<endl; link.Print(); cout<<"please input an non-existent data for testing remove function"<<endl; cin>>data; link.Remove(data); cout<<"length = "<<link.Length()<<endl; cout<<"the result after remove:"<<endl; link.Print(); cout<<"please input an exist data for testing find function"<<endl; cin>>data; cout<<"length = "<<link.Find(data)<<endl; cout<<"please input an non-existent data for testing find function"<<endl; cin>>data; cout<<"length = "<<link.Find(data)<<endl; cout<<"the result after reverse"<<endl; link.Reverse(); link.Print(); system("pause"); return 0; }
相关文章推荐
- 算法(05):基本链表的操作及双向链表
- JAVA中关于链表的操作和基本算法
- 算法与数据结构-单向链表的基本操作C语言实现
- 数据结构实验一--单链表的基本操作的算法
- 链表的基本操作函数算法(C/C++实现)
- 数据结构入门学习系列-5(链表的基本操作算法)
- 数据结构之链表基本操作算法演示
- 数据结构与算法-链表的基本操作---ShinPans
- JAVA中关于链表的操作和基本算法
- JAVA中关于链表的操作和基本算法
- 1326 Problem A 算法2-8~2-11:链表的基本操作
- HNCU1326:算法2-8~2-11:链表的基本操作
- Acm Club 1326:算法2-8~2-11:链表的基本操作
- 链表的操作和基本算法 java
- JAVA中关于链表的操作和基本算法
- JAVA中关于链表的操作和基本算法
- HNU1326: 算法2-8~2-11:链表的基本操作
- 数据结构高分笔记 算法2-8~2-11:链表的基本操作
- JAVA中关于链表的操作和基本算法
- JAVA中关于链表的操作和基本算法